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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李敬 中级黑马   /  2012-8-25 17:56  /  1925 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Demo{
    int i = 10;
    public static void value(Demo d){
        d.i = 20;
        Demo d1 = new Demo();
        d = d1;
        System.out.println(d.i);
    }
    public static void main(String [] args){
            Demo d = new Demo();
        value(d);
        System.out.println(d.i);
    }
}

为什么是
10
20
我怎么看都是
20
10
求解答

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

6 个回复

倒序浏览
[Fly] 希望能帮到楼主 [/Fly]

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 刘源 于 2012-8-25 19:07 编辑

public class Demo{
    int i = 10;
    public static void value(Demo d){
        d.i = 20;//第三步,这里d.i=20。将地址d中的变量i赋值为20.
        Demo d1 = new Demo();//第四步,然后你创建d1,但d1.i=10,没错把。
        d = d1;//第五步,你将d1地址给了d.所以选择d和d1都指向d1.i=10.
        System.out.println(d.i);//第六步  ,所以打印d.i=d1.i=10。
    }
    public static void main(String [] args){
            Demo d = new Demo();//第一步
        value(d);//第二步,注意当这一步执行完后因为d1是方法中定义的所以d1地址就不存在了。所以选择d又回到以前的地址。
        System.out.println(d.i);//第七步,因为现在是执行主函数中的d的地址,即d.i=20.
    }
}

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

回复 使用道具 举报
class Demo{
     int i = 10;
     public static void value(Demo d){
         d.i = 20;
         Demo d1 = new Demo();
         d = d1;          //将d1所在内存空间的地址值传给d,即d便代表了d1,因为dl只是实例化对象了,并没有改变类中成员变量的值
         System.out.println(d.i);    //因而此打印出的是没有变化过的值10
     }
     public static void main(String [] args){
             Demo d = new Demo();
         value(d);     //调用value函数 得出的值为10
         System.out.println(d.i);    //此处的d为这个主函数中的Demo d = new Demo();  因为d中的成员值在调用value函数的时候被改成了20,所以打印出结果为20
     }
}

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 新人回帖,赞一个!

查看全部评分

回复 使用道具 举报

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

回复 使用道具 举报
class Demo{
    int i = 10;
    public static void value(Demo d){
        d.i = 20;
        Demo d1 = new Demo();//新的对象d1,分配了新的地址值。d1的属性值i为10
        d = d1;//让d指向了新的地址值即d1的地址值,现在d和d1完全相同了。
        System.out.println(d.i);//所以d.i即为d1.i,为10
    }
    public static void main(String [] args){
        Demo d = new Demo();
        value(d);//打印的是d1的属性值,value把d值传过去,在value内部把d的属性值改变了
                //所以下一步输出的是d的新的属性值,即20
                System.out.println(d.i);//打印的是d的新的属性值。
    }
}

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

回复 使用道具 举报
看明白了,论坛都是牛人啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马