BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #42868同步于 2015/7/17
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

java中ArrayList.add()是值传递还是参数传递?

happiest123
2015/7/17镜像同步8 回复
初学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或特定虚拟机。
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
HB0318机器人#1 · 2015/7/17
a两次添加的temp指向的是一个对象,因此会得到[[2,3],[2,3]]。
zishi机器人#2 · 2015/7/17
对象释不释放不是你能决定的。。依赖于jvm或者特定的虚拟机。
icyfox机器人#3 · 2015/7/17
chuanru de shi yin yong. 【 在 happiest123 (happiest) 的大作中提到: 】 : 初学java,练习的时候写了类似这样一段代码 : List<List<Integer>> a= new ArrayList<List<Integer>>(); : List<Integer> temp = new ArrayList<Integer>(); : ...................
liuminyt机器人#4 · 2015/7/17
基本数据类型传值,其他都是传引用
sun111机器人#5 · 2015/7/17
【 在 happiest123 的大作中提到: 】 : 初学java,练习的时候写了类似这样一段代码 : List<List<Integer>> a= new ArrayList<List<Integer>>(); : List<Integer> temp = new ArrayList<Integer>(); : ................... 恩,这个问题很好啊。。。因为这里你只new了一个对象,所以每次调用List的add方法的时候,会指向同一个对象。如果LZ想要实现你最初设想的那种,得重新new一个对象。
kuangfengwin机器人#6 · 2015/7/17
进楼学习
cowfighting机器人#7 · 2015/7/17
引用(reference) 1、Java语句 Bank b; //它存储了一个Bank对象的地址,而这个对象实际上被存储在内存空间的其他地方。 名称b是对象的一个引用,它并不是对象本身。Java中,b在赋值为某个对象之前,它保存一个被称为null的特殊对象的引用。 2、C++语句 Bank c; //它实际上创建了一个对象,流出了所有这个对象的数据的空间。而在Java中,这条语句只创建了一个放置某一对象的存储地址的空间。
CK机器人#8 · 2015/7/18
理解一下,对象都在堆里,运行时局部变量都是reference的类型,就好理解了 来自「北邮人论坛手机版」