返回信息流初学java,练习的时候写了类似这样一段代码
List<List<Integer>> a= new ArrayList<List<Integer>>();
List<Integer> temp = new ArrayList<Integer>();
temp.add(1);
a.add(temp);
temp.clear();
temp.add(2);
temp.add(3);
a.add(temp);
System.out.println(a);
输出结果为[[2,3],[2,3]],但我实际想获得的是[[1],[2,3]]。所以add是参数传递吗?
在网上查找解决方法,new一下temp是能够解决。但这样是不是前面的temp没有被释放呢?有没有其他方法,比如将temp的值传入a中。
--------------------------更新:谢谢版上各位热心的解答--------------------------------
总结有3点:
(1)对象创建分三步:声明引用、堆中创建对象和将引用指向对象。
(2)在传递的过程中,基本数据类型是传值,其他都是传引用。
(3)对象的释放依赖于jvm或特定虚拟机。
这是一条镜像帖。来源:北邮人论坛 / java / #42868同步于 2015/7/17
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
java中ArrayList.add()是值传递还是参数传递?
happiest123
2015/7/17镜像同步8 回复
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
chuanru de shi yin yong.
【 在 happiest123 (happiest) 的大作中提到: 】
: 初学java,练习的时候写了类似这样一段代码
: List<List<Integer>> a= new ArrayList<List<Integer>>();
: List<Integer> temp = new ArrayList<Integer>();
: ...................
【 在 happiest123 的大作中提到: 】
: 初学java,练习的时候写了类似这样一段代码
: List<List<Integer>> a= new ArrayList<List<Integer>>();
: List<Integer> temp = new ArrayList<Integer>();
: ...................
恩,这个问题很好啊。。。因为这里你只new了一个对象,所以每次调用List的add方法的时候,会指向同一个对象。如果LZ想要实现你最初设想的那种,得重新new一个对象。
引用(reference)
1、Java语句
Bank b; //它存储了一个Bank对象的地址,而这个对象实际上被存储在内存空间的其他地方。 名称b是对象的一个引用,它并不是对象本身。Java中,b在赋值为某个对象之前,它保存一个被称为null的特殊对象的引用。
2、C++语句
Bank c; //它实际上创建了一个对象,流出了所有这个对象的数据的空间。而在Java中,这条语句只创建了一个放置某一对象的存储地址的空间。