2

我试图了解 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;
    }
}

结果: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());
    }
}

结果:2 | 1

那么这里有什么不同呢?

4

4 回答 4

5

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

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

在第二种情况下,您正在本地创建一个的类型对象。退出方法时将具有相同的值。在它里面你 print ,然后你 print ,这是并且因此变化不会反映。Integerirefer()2i1

于 2013-07-27T10:04:26.677 回答
5

在java中,数组是原始类型。整数是对象类型。

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

对于对象,您通过值传递对对象的引用。

在第一个示例中,您正在更改数组中的值。

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

于 2013-07-27T10:08:35.757 回答
3

v[0] = 5, 就像说Get 0th element of current v's reference and make it 5.
i = new Integer(2), 就像说change i to 2's Integer object reference

在一种情况下,您正在通过引用更改内部值,而在后一种情况下,您正在更改引用本身。

于 2013-07-27T10:04:16.363 回答
2

这里的区别在于它们是不同的。

在您的第一个示例中,您将参数传递给另一个方法,该方法正在修改它的一个元素,该元素在调用者处可见。在第二种情况下,您将变量分配给一个新值,该值在调用者处不可见,因为 Java 具有按值传递的语义。

NB 'Primary variable' 在 Java 中没有任何意义。

我不知道您标题中的“提前”一词与任何事情有什么关系。

于 2013-07-27T10:07:56.957 回答