java程序员面试金典--值传递和引用传递

下列程序会输出什么

class value{
    public int i = 15;
}
public class ValueTransmit {
    public static void main(String[] args) {
        first();
    }

    private static void first() {
        int i = 100;
        value v = new value();
        v.i = 25;
        second(v,i);
        System.out.println(","+v.i);

    }

    private static void second(value v, int i) {
         i = 0;
        v.i = 20;
        value value = new value();
        v = value;
        System.out.print(v.i+","+i);
    }

}

答案是15,0,20

这道题主要是考察面试者对值传递和引用传递的掌握程度

图片是一种好的解释,解释见下图

首先是first方法的情况
java程序员面试金典--值传递和引用传递_第1张图片
images
然后是second的传入了两者的引用情况后
java程序员面试金典--值传递和引用传递_第2张图片
images
接下来是second方法的具体情况
java程序员面试金典--值传递和引用传递_第3张图片
images
综上所述:在传值(传引用)就相当于制造了一把备用钥匙。
    通过这把钥匙可以改变仓库的货,原钥匙管理的仓库没有变,只不过是被备用钥匙篡改了。

你可能感兴趣的:(java程序员面试金典--值传递和引用传递)