java 引用类型的数据传递的是内存地址实例
程序员文章站
2022-03-12 10:53:06
目录java 引用类型的数据传递的是内存地址看下面的代码和截图list集合存引用数据类型时的问题集合list的存储元素java 引用类型的数据传递的是内存地址java中引用类型的数据,传递的是内存地址...
java 引用类型的数据传递的是内存地址
java中引用类型的数据,传递的是内存地址,像类,数组,接口,string等等都是引用类型!
看下面的代码和截图
public class test2 { // java中引用类型的数据传递的是内存地址 private map<string, student> students = new hashtable<string, student>(); public void mytest() { student student1 = new student("令狐冲", 16, "华山派", 19888.66); student student2 = new student("韦小宝", 15, "紫禁城", 99999.99); student student3 = new student("张无忌", 18, "光明顶", 18888.88); students.put("1", student1); students.put("2", student2); students.put("3", student3); iterator<map.entry<string, student>> entries = students.entryset().iterator(); while (entries.hasnext()) { map.entry<string, student> entry = entries.next(); system.out.println("key = " + entry.getkey() + ", value = " + entry.getvalue()); entry.getvalue().setage(entry.getvalue().getage() + 1); } } public void mytest2(){ list<string[]> citys = new arraylist<string[]>(); string [] citynames = {"赣州市", "于都县", "江西省", "中国", "赣南地区"}; citys.add(citynames); for (int index = 0; index < citys.size(); index++) { string[] mycitynames = citys.get(index); for (int i = 0; i < mycitynames.length; i++) { system.out.println(mycitynames[i]); if (i == 1) { //修改mycitynames数组 (java中引用类型的数据传递的是内存地址) mycitynames[i] = "我们" + mycitynames[i]; } } system.out.println("--------------------------------"); for (int i = 0; i < mycitynames.length; i++) { system.out.println(mycitynames[i]); } } system.out.println("--------------------------------"); //修改citynames数组 (java中引用类型的数据传递的是内存地址) citynames[0] = "我们赣州市"; for (int index = 0; index < citys.size(); index++) { string[] mycitynames = citys.get(index); for (int i = 0; i < mycitynames.length; i++) { system.out.println(mycitynames[i]); } } } public static void main(string[] args) { test2 test2 = new test2(); test2.mytest(); system.out.println("--------------------------------"); iterator<map.entry<string, student>> entries = test2.students.entryset().iterator(); while (entries.hasnext()) { map.entry<string, student> entry = entries.next(); system.out.println("key = " + entry.getkey() + ", value = " + entry.getvalue()); } test2.mytest2(); } }
list集合存引用数据类型时的问题
集合list的存储元素
(1)如果list中存的是基本数据类型,则存的是值
(2)如果list中存的是引用数据类型(如对象等),则存的是引用
如果对象的引用地址没变,内容变化,也会引起调用该对象时内容变化
下面举一个在集合list中存放对象的例子:
//构建原始数据 arraylist<goods> list = new arraylist(); goods goods1=new goods("plum ", 2); list.add(goods1); list.add(new goods("apple", 1)); list.add(new goods("banana", 2)); //打印原始数据 system.out.println("原始数据:"); for(goods goods : list){ system.out.println(goods); } goods1.setgoodsid(444);//改变goods1的内容 system.out.println("原始数据1:"); for(goods goods : list){ system.out.println(goods); }
结果:
原始数据:
goods{goodsname='plum ', goodsid=2}
goods{goodsname='apple', goodsid=1}
goods{goodsname='banana', goodsid=2}
原始数据1:
goods{goodsname='plum ', goodsid=444}
goods{goodsname='apple', goodsid=1}
goods{goodsname='banana', goodsid=2}
结果表明:由于list中存储对象的引用所指的内容发生了变化,所以导致了list中元素内容的改变
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。
上一篇: android的got表HOOK实现代码
下一篇: 钵钵鸡要泡多久才入味