黑马程序员技术交流社区

标题: 关于引用传递的一些问题 [打印本页]

作者: tuanjie    时间: 2014-1-13 09:06
标题: 关于引用传递的一些问题
本帖最后由 tuanjie 于 2014-1-14 10:52 编辑

下面是关于引用传递的的代码,代码都差不多,可结果运行却不一样,
引用传递一:
  1. class Demo{
  2.         int temp = 30;
  3. }
  4. public class TestJava {
  5.         public static void main(String[] args) {
  6.                 Demo d1 = new Demo();
  7.                 d1.temp = 50;
  8.                 System.out.println("fun方法调用之前:"+ d1.temp);
  9.                 fun(d1);
  10.                 System.out.println("fun方法调用之后" + d1.temp);
  11.         }
  12.         public static void fun(Demo d2){
  13.                 d2.temp = 100;
  14.         }
  15. }
复制代码
运行结果:
fun方法调用之前:50
fun方法调用之后100

引用传递二:
  1. class Demo{
  2.         String temp = "hello";
  3. }
  4. public class TestJava {
  5.         public static void main(String[] args) {
  6.                 Demo d1 = new Demo();
  7.                 d1.temp = "world";
  8.                 System.out.println("fun方法调用之前:"+ d1.temp);
  9.                 fun(d1);
  10.                 System.out.println("fun方法调用之后:" + d1.temp);
  11.         }
  12.         public static void fun(Demo d2){
  13.                 d2.temp = "welcome";
  14.         }
  15. }
复制代码
运行结果:
fun方法调用之前:world
fun方法调用之后:welcome

同样都是引用传递,只是Demo类中的temp类型变了,运行结果差别很大,谁能分析一下这是什么原因吗?


作者: yaohsieh    时间: 2014-1-13 21:45
没搞明白你到底想问什么?两个运行结果不是一样的道理吗?
作者: mrwise1991    时间: 2014-1-13 22:49
不知道同学所说的差别在哪里?根据你所描述的,这完全是合乎情理,没有什么差别啊
作者: tuanjie    时间: 2014-1-14 10:27
mrwise1991 发表于 2014-1-13 22:49
不知道同学所说的差别在哪里?根据你所描述的,这完全是合乎情理,没有什么差别啊 ...

在fun方法里,把d1的引用地址赋给d2,d2修改temp的值,怎么会影响d1的temp值
作者: mrwise1991    时间: 2014-1-14 10:40
tuanjie 发表于 2014-1-14 10:27
在fun方法里,把d1的引用地址赋给d2,d2修改temp的值,怎么会影响d1的temp值

因为在将d1的引用赋给d2的时候,它们两个就指向了同一个对象在堆内存中的首地址值,此时无论是d1还是d2,访问属性temp并修改之后都会同步到该对象在堆内存中的成员变量temp的值。
作者: tuanjie    时间: 2014-1-14 10:50
mrwise1991 发表于 2014-1-14 10:40
因为在将d1的引用赋给d2的时候,它们两个就指向了同一个对象在堆内存中的首地址值,此时无论是d1还是d2, ...

那谢谢你了
作者: mrwise1991    时间: 2014-1-14 11:24
tuanjie 发表于 2014-1-14 10:50
那谢谢你了

不客气,一起进步。。。
作者: 黄晓鑫    时间: 2014-1-14 19:17
字符串一旦赋值就不会被改变 知道这点去了解就OK了




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