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

arraylist求问

westbear
2016/3/27镜像同步10 回复
在扩容的时候 ,会拷贝数组,深拷贝还是浅拷贝?什么样子的过程呢?拷贝的时候是新开辟空间复制元素吗?原来的数组引用怎么处理的呢?置为null吗 发自「贵邮」
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
nuanyangyang机器人#1 · 2016/3/27
浅拷贝。里面所有的对象还指向原来的对象,对象没有被拷贝。 另外,ArrayList的用户应该看不出来里面的东西被拷贝了,其中一点就是“原来指向某个对象,现在还是指向那个对象”。 java里面class都是引用类型,不像C++和Rust那样,Java没有“值类型”。如果C++里的vector拷贝了,发生的事情会更微妙。
wht机器人#2 · 2016/3/27
http://www.cnblogs.com/Coffee-guy/archive/2012/08/04/2623020.html 一维数组传递的是值,不是引用啊,这应该是深复制吧。。。 【 在 nuanyangyang 的大作中提到: 】 : 浅拷贝。里面所有的对象还指向原来的对象,对象没有被拷贝。 : 另外,ArrayList的用户应该看不出来里面的东西被拷贝了,其中一点就是“原来指向某个对象,现在还是指向那个对象”。 : java里面class都是引用类型,不像C++和Rust那样,Java没有“值类型”。如果C++里的vector拷贝了,发生的事情会更微妙。 : ...................
nuanyangyang机器人#3 · 2016/3/27
【 在 wht 的大作中提到: 】 : http://www.cnblogs.com/Coffee-guy/archive/2012/08/04/2623020.html : 一维数组传递的是值,不是引用啊,这应该是深复制吧。。。 : 数组是对象,对象类型的变量的值是指向这个对象的引用。Java在传递参数的时候,永远是“按值传递”,而这个值是一个引用。 至于数组的元素,如果元素类型是基本类型,那么值直接存在数组中;如果元素类型是对象类型,那么数组里每一个元素都是一个指向这个类型的对象的引用。 arraycopy拷贝的是每个元素的值。如果是对象类型,那么数组元素的值就是指向对象的引用。因此,是浅拷贝。
westbear机器人#4 · 2016/3/27
如果元素很多的话,这样感觉效率好低啊,虽然只是复制对象的引用 【 在 nuanyangyang 的大作中提到: 】 : 浅拷贝。里面所有的对象还指向原来的对象,对象没有被拷贝。 : 另外,ArrayList的用户应该看不出来里面的东西被拷贝了,其中一点就是“原来指向某个对象,现在还是指向那个对象”。 : : java : ......... 发自「贵邮」
westbear机器人#5 · 2016/3/27
暖神,还有一个问题:为什么java里面的泛型是伪泛型呢?C#是真泛型怎么理解呢? 【 在 nuanyangyang 的大作中提到: 】 : 浅拷贝。里面所有的对象还指向原来的对象,对象没有被拷贝。 : 另外,ArrayList的用户应该看不出来里面的东西被拷贝了,其中一点就是“原来指向某个对象,现在还是指向那个对象”。 : : java : ......... 发自「贵邮」
nuanyangyang机器人#6 · 2016/3/27
【 在 westbear 的大作中提到: 】 : 如果元素很多的话,这样感觉效率好低啊,虽然只是复制对象的引用 : : 发自「贵邮」 如果从1扩张到n,如果每次容量加倍,如1->2->4->8->16->...,那么总的拷贝的元素(的值或者引用)的个数约等于n。还好吧。
nuanyangyang机器人#7 · 2016/3/27
【 在 westbear 的大作中提到: 】 : 暖神,还有一个问题:为什么java里面的泛型是伪泛型呢?C#是真泛型怎么理解呢? : : 发自「贵邮」 确切地说,是JVM无法表达“泛型”的概念。所以“泛型”只是Java语言的概念,到了JVM,所有的泛型参数里的类型都会变成Object。而.NET虚拟机本身有虚拟机层的泛型。
westbear机器人#8 · 2016/3/27
也就是说真泛型的意思是:虚拟机会针对传入的不同类型编译成不同的类型 ,不是像java那样都擦除成object? 【 在 nuanyangyang 的大作中提到: 】 : : 【 在 westbear 的大作中提到: 】 : : 暖神,还有一个问题:为什么java里面的泛型是伪泛型呢?C#是真泛型怎么理解呢? : : : : 发自「贵邮」 : : 确切地说,是JV : ......... 发自「贵邮」
nuanyangyang机器人#9 · 2016/3/27
【 在 westbear 的大作中提到: 】 : 也就是说真泛型的意思是:虚拟机会针对传入的不同类型编译成不同的类型 ,不是像java那样都擦除成object? : : 发自「贵邮」 起码.NET会。