推进参考变量?

Tha*_*gnv 2 java variables reference object

我试图理解Object与原始变量之间的区别,当它们用作方法中的参数时.

有一些使用参考变量的例子:

public class Test1 {
    public static void main(String[] args) {
        int[] value = {1};
        modify(value);
        System.out.println(value[0]);
    }

    public static void modify(int[] v) {
        v[0] = 5;
    }
}
Run Code Online (Sandbox Code Playgroud)

结果:5

public class Test2 {

    public static void main(String agrs[]) {
        Integer j = new Integer(1);
        refer(j);
        System.out.println(j.intValue());
    }

    public static void refer(Integer i) {
        i = new Integer(2);
        System.out.println(i.intValue());
    }
}
Run Code Online (Sandbox Code Playgroud)

结果:2 | 1

那么这里有什么不同?

Mar*_*oun 5

回想一下,数组引用是按值传递的.数组本身就是一个对象,而且根本没有传递(这意味着如果你将一个数组作为参数传递,你实际上会传递它的内存地址位置).

modify()方法中,您将分配5到数组中的第一个位置,因此,更改数组的值.因此,当您打印结果时,您会得到:5因为值已更改.

在第二种情况下,您将在本地创建一个新的Object类型Integer.i退出方法时将具有相同的值refer().在它内部你打印2,然后你打印i,这是1因此变化不反映.

  • Downvoter ..请解释一下,这样我就可以从错误中吸取教训.谢谢. (2认同)

swa*_*apy 5

在java数组中是原始类型.而Integer是Object类型.

对于原语,它通过值传递实际值(例如3)

对于您传递的对象,值为对象的引用.

在第一个示例中,您将更改数组中的值.

而在其他示例中,当您返回主函数时,您正在将i的引用更改为对象值为2的其他内存位置,因为您没有返回值.其参考范围仅限于"参考"方法.