黑马程序员技术交流社区

标题: java中集合的值传递问题 [打印本页]

作者: 凊係柈泩    时间: 2012-12-17 20:27
标题: java中集合的值传递问题
本帖最后由 凊係柈泩 于 2012-12-18 17:35 编辑

例如ArrayList之类的集合进行值传递的时候
List<String> a = new ArrayList<String>();
List<String> b = new ArrayList<String>();
b = a;是引用传递,有没有值传递的方法
作者: 黄小贝    时间: 2012-12-17 20:33
本帖最后由 黄小贝 于 2012-12-17 20:40 编辑

虽然楼主说法不是那么严谨,但是我还是可以理解楼主在问什么,自行谷歌一下 Object类中的clone方法





作者: 何创    时间: 2012-12-17 20:33
  假如 : arrlist有id,name,password,UserInfo是实体类,里面有get,set
UserInfo getSet = new UserInfo();
getSet.Id = int.Parse(textBoxX1.Text);
getSet.Name = textBoxX2.Text;
getSet.Password = textBoxX3.Text;
MyList.Add(getSet);
你可以在外部声明get set 方法 通过get set 方法 传值和取值。
你的问题 我理解是这样的,不是很理解你的真实意思。
作者: 孙辉辉    时间: 2012-12-17 20:39
你这个问题我个人觉得只要你可以从内存角度去理解就能很明白的理解什么是值传递什么是引用传递。
List<String> a = new ArrayList<String>();
执行这句时在虚拟机栈中初始化了一块内存引用a,在堆中初始化了一块内存存放了new的对象,然后引用a指向了该对象。

List<String> b = new ArrayList<String>();
执行这句时在虚拟机栈中初始化了一块内存引用b,在堆中初始化了一块内存存放了new的对象,然后引用b指向了该对象。

b = a;
在这一步的时候很关键就是将a的引用指向了b引用,换句话说现在栈里的应用a和引用b都指向了new的第一个对象,所以我觉得是引用传递。

至于什么是值传递和什么是引用传递,其实基本数据类型一般传入方法的时候是值传递,因为基本数据类型实际就是存在栈中的,直接将值传递给了另一个变量,引用传递基本上是指对象的引用传递,而对象本身没变化只是对象的引用指向发生了变化。

然后数组和集合可以使用Arrays和Collections的算法工具类实现拷贝和复制,严禁使用循环/遍历赋值操作。

作者: 董将    时间: 2012-12-18 11:29
你想问的是不是传值跟传址的区别?
基本上是基本数据类型是走的传值,引用数据类型走的传址,也就是地址值,记住练习练习,多实验画图就明白了
作者: 凊係柈泩    时间: 2012-12-18 17:22
问题已经解决




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2