使用Java包装类声明变量

时间:2013-09-23 13:14:50

标签: java reference

在Java中,我们可以使用包装类来声明变量。 例如

    Integer x=5;

这意味着有一个引用'x'指向值5。

然后我宣布另一个名为y的引用指向相同的值

    Integer y=x;  //now y should point to the number "5"

然后我改变了y指向

的值
     y=20;

这不会使x和y都指向20吗? 因为当我打印x时,我仍然得到5

4 个答案:

答案 0 :(得分:3)

以下内容:

y=20;

重新绑定y以指向不同的Integer对象。

它不会触及x,因此其值不会改变。

答案 1 :(得分:1)

每次看到表格中的代码

Integer x = 5;

编译器将其替换为类似

的内容
Integer x = Integer.valueOf(5);

几乎相似
Integer x = new Integer(5);

事实上,y = 20只不过是y = new Integer(20),所以y指针被重新定位为指向新创建的Integer对象。

答案 2 :(得分:1)

在第一行Integer x=5; x是对值为5的Integer对象的引用。然后Integer y=x;为同一对象创建另一个引用,因此xy引用同一个对象。最后,y=20;使引用y指向另一个对象,值{20}的Integer

来自Ken Arnold,James Gosling和David Holmes的“Java编程语言,第4版”:

  

Java编程语言不通过引用传递对象;它按值传递对象引用。因为同一引用的两个副本引用相同的实际对象,所以通过一个引用变量进行的更改可以通过另一个引用变量。

但是在你的情况下,你实际上并没有修改初始对象,而是将其中一个引用更改为指向另一个对象。

答案 3 :(得分:0)

$ ./bin/base16decode aaff hex value: aaff result : aaff binary : 1010101011111111

上面的语句分配一个存储空间,该存储空间保留值5,并由x引用;

Integer x = 5

上面的语句将引用y指向与x相同的内存位置。

当您将值分配给y = 20时。这将创建一个新的存储空间,该存储空间保存值20,并由y引用。因此,此时x和y都指向不同的内存位置。