黑马程序员技术交流社区

标题: 函数中对象的问题 [打印本页]

作者: 星河    时间: 2015-3-31 21:35
标题: 函数中对象的问题
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


作者: 山里孩子    时间: 2015-3-31 23:02
确实太饶了??不能解释
作者: woaikk991100    时间: 2016-4-1 18:44
搞不懂.....我也看了半天,   v=va;  明明变了,怎么回事?  求助大神
作者: leiothrixs    时间: 2016-4-3 00:43
方法弹栈后,对象属性依然是20!

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

如图

如图

作者: 无波无澜    时间: 2016-4-3 18:14
感觉是在进入sec函数以后执行了完以后,在还原现场的时候V 并不是 全局变量,所以虽然在aec中改变了,但在first中保留的地址是以前的,所以不会再first中去改变




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