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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 张腾达 于 2012-7-30 09:07 编辑

值传递和引用传递的区别,一直有些晕晕乎乎,谁能举个例子形象的解释下{:soso_e101:}

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

10 个回复

倒序浏览
呃……java中只有值传递,没有引用传递,内存地址,其实也是个值。别晕乎了~

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
上面那个哥们说的也对,java中只有值传递的。但是不同的值也是有区别的
1.传值方式,只是将实参的值的拷贝传递给函数(方法),在方法内对形参进行操作,其对象是实参的拷贝,对实参不能造成影响.在方法结束返回后,形参被释放丢弃,实参的内容并不会改变;

2.传址方式,将实参的地址传递给函数(方法),在方法内对形参进行操作即等于对实参进行相同的操作,在方法结束返回后,形参同样被释放,实参的内容将会是对形参进行操作的结果.
楼主下面是我的验证代码,希望你耐心看下,看完你就不糊涂了,建议你自己运行一遍,求加分哦
  1. /*
  2.         需求:验证形参和实参的关系
  3. */
  4. class Student
  5. {
  6.         public int age =4;
  7.         public String name="hello";
  8. }
  9. class Test
  10. {
  11.         public static void main(String[] args)
  12.         {
  13.                 int a = 3;
  14.                 int b = 4;
  15.                 changeBaseStyle(a,b);
  16.                 //验证是否改变了实参的值,结果是显而易见的没有改变啦
  17.                 System.out.println(a+b);
  18.                
  19.                 //验证传地址值是否是形参的改变直接影响了实参

  20.                 Student s = new Student();
  21.                 changeIndexStyle(s);
  22.                 System.out.println(s.age+"**"+s.name);
  23.         }

  24.         public static void changeBaseStyle(int a,int b)
  25.         {
  26.                 a=4;
  27.                 b=5;
  28.                 //这里的a和b是形参哦,实参在主方法内
  29.         }

  30.         public static void changeIndexStyle(Student stu)
  31.         {
  32.                 stu.age=5;
  33.                 stu.name="实参改变了吗?";
  34.         }
  35. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
先回复了再看···不过为什么一直拿java说事···
帖子我发在.net的{:soso_e143:}
回复 使用道具 举报
基本数据类型赋值属于值传递;引用类型之间赋值属于引用传递。
值传递传递的是实实在在的变量值;引用传递传递的是对象的引用地址。
值传递后,两个变量改变的是各自的值;引用传递后,两个引用改变的是同一个对象的状态

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
我觉得这个帖子又要石沉大海了……技术分好难得……还要赶机遇啊
回复 使用道具 举报
值传递是传递的值,引用传递时传递的内存地址。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
李晋 中级黑马 2012-7-29 19:57:07
8#
形象比喻一下就比如你去商店买东西,你说买某某,然后售货员直接给你的就是值传递,售货员说你去某某地方取告诉你的是个地址就是引用传递,当然直接给就是数度比较快了,但毕竟他拿的东西量是有限的,而引用数度慢点,但量大

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
赵令 中级黑马 2012-7-29 20:07:00
9#
打个 比方:   值传递      相当于 一个文档的复制后的文件   是一个独立的文件
                   引用传递   相当于 一个文档的快捷方式  两个是相连的   

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
值传递只是传递值的副本,将变量的值传递给其他方法后自身不受影响。而引用传递则是传递变量的内存所在的地址,其他方法中所执行的操作会引起自身的变化,因为是在同一内存空间执行操作

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
传值等于将参数的值传递给方法,作用对象是形参,传递的速度比较快
而传址是将参数的地址传递给方法,就等于是将实参和形参的地址绑定在一起,想要得到参数值就要到地址里面去找

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马