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

© 星河 中级黑马   /  2015-3-31 21:35  /  585 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Value{
    public int i = 15;
} class Test {
    public static void main(String[] args) {
        Test t = new Test();
        t.first();
    }
    public void first(){
        int i = 5;
        Value v = new Value();
        v.i = 25;
        sec(v,i);
        System.out.println(v.i);
    }
    public void sec(Value v,int i){
        i = 0;
        v.i = 20;
        Value va = new Value();
        v=va;
        System.out.println(v.i+" "+i);
    }
}
输出结果为什么是
15 0
20
而不是
15 0
15

4 个回复

倒序浏览
确实太饶了??不能解释
回复 使用道具 举报
搞不懂.....我也看了半天,   v=va;  明明变了,怎么回事?  求助大神
回复 使用道具 举报
方法弹栈后,对象属性依然是20!

捕获11.PNG (82.97 KB, 下载次数: 8)

如图

如图
回复 使用道具 举报
感觉是在进入sec函数以后执行了完以后,在还原现场的时候V 并不是 全局变量,所以虽然在aec中改变了,但在first中保留的地址是以前的,所以不会再first中去改变
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马