使用Java包装器类声明变量
在Java中,我们可以使用包装器类来声明变量。 比如说使用Java包装器类声明变量,java,reference,Java,Reference,在Java中,我们可以使用包装器类来声明变量。 比如说 Integer x=5; 这意味着存在一个指向值5的引用“x” 然后我声明了另一个名为y的引用,它指向相同的值 Integer y=x; //now y should point to the number "5" 然后我改变了y指向的值 y=20; 这不就是x和y都指向20吗? 因为当我打印x时,我仍然会得到以下5个: y=20; 重新绑定y以指向不同的整数对象 它不接触x,因此它的值不会更改。每次您看
Integer x=5;
这意味着存在一个指向值5的引用“x”
然后我声明了另一个名为y的引用,它指向相同的值
Integer y=x; //now y should point to the number "5"
然后我改变了y指向的值
y=20;
这不就是x和y都指向20吗?
因为当我打印x时,我仍然会得到以下5个:
y=20;
重新绑定y
以指向不同的整数
对象
它不接触
x
,因此它的值不会更改。每次您看到表单中的代码时
Integer x = 5;
编译器将其替换为以下内容
Integer x = Integer.valueOf(5);
这与
Integer x = new Integer(5);
因此,实际上,
y=20
只不过是y=new Integer(20)
,因此y指针被重新定位以指向新创建的整数对象。在第一行Integer x=5
x
是对值为5的整数对象的引用。然后整数y=x代码>为同一对象创建另一个引用,因此x
和y
引用同一对象。最后,y=20
使引用y
指向另一个对象,即值为20的整数
来自Ken Arnold、James Gosling和David Holmes的“Java编程语言,第四版”:
Java编程语言不通过引用传递对象;它按值传递对象引用。由于同一引用的两个副本引用同一个实际对象,因此通过一个引用变量所做的更改通过另一个可见
但在您的情况下,实际上并不修改初始对象,而是更改其一个引用以指向另一个对象。Integer x=5
上述语句分配一个内存空间,该内存空间保存值5,并由x引用
整数y=x
上面的语句将引用y指向与x相同的内存位置
将值指定给y=20时。这将创建一个新的内存空间,其中包含值20,并由y引用。因此,此时x和y都指向不同的内存位置。忘记指针吧——Java中没有这样的东西y=20
与y=Integer相同。valueOf(20)
,因此y
之后引用不同的对象。所以java总是重新绑定到不同的对象?还有其他办法吗?@fadytaher:对可变类的同一实例有很多引用。