A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 凊係柈泩 中级黑马   /  2012-12-17 20:27  /  1405 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 凊係柈泩 于 2012-12-18 17:35 编辑

例如ArrayList之类的集合进行值传递的时候
List<String> a = new ArrayList<String>();
List<String> b = new ArrayList<String>();
b = a;是引用传递,有没有值传递的方法

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

5 个回复

倒序浏览
本帖最后由 黄小贝 于 2012-12-17 20:40 编辑

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




回复 使用道具 举报
  假如 : 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 方法 传值和取值。
你的问题 我理解是这样的,不是很理解你的真实意思。

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
你这个问题我个人觉得只要你可以从内存角度去理解就能很明白的理解什么是值传递什么是引用传递。
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的算法工具类实现拷贝和复制,严禁使用循环/遍历赋值操作。

评分

参与人数 1技术分 +1 收起 理由
崔政 + 1

查看全部评分

回复 使用道具 举报
你想问的是不是传值跟传址的区别?
基本上是基本数据类型是走的传值,引用数据类型走的传址,也就是地址值,记住练习练习,多实验画图就明白了
回复 使用道具 举报
问题已经解决
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马