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
那么这里有什么不同?
回想一下,数组引用是按值传递的.数组本身就是一个对象,而且根本没有传递(这意味着如果你将一个数组作为参数传递,你实际上会传递它的内存地址位置).
在modify()方法中,您将分配5到数组中的第一个位置,因此,更改数组的值.因此,当您打印结果时,您会得到:5因为值已更改.
在第二种情况下,您将在本地创建一个新的Object类型Integer.i退出方法时将具有相同的值refer().在它内部你打印2,然后你打印i,这是1因此变化不反映.
在java数组中是原始类型.而Integer是Object类型.
对于原语,它通过值传递实际值(例如3)
对于您传递的对象,值为对象的引用.
在第一个示例中,您将更改数组中的值.
而在其他示例中,当您返回主函数时,您正在将i的引用更改为对象值为2的其他内存位置,因为您没有返回值.其参考范围仅限于"参考"方法.