【发布时间】:2017-11-28 12:09:01
【问题描述】:
我很难理解为什么 Java 中的包装器类的行为不像引用类型。 示例:
Integer one = 10;
Integer two = one;
one = 20;
System.out.println(one);
System.out.println(two);
输出将是:
20
10
我认为two 将是 20,就像在我创建自己的类的示例中一样:
class OwnInteger {
private int integer;
public OwnInteger(int integer) {
this.integer = integer;
}
public int getInteger() {
return integer;
}
public void setInteger(int integer) {
this.integer = integer;
}
}
OwnInteger one = new OwnInteger(10);
OwnInteger two = one;
one.setInteger(20);
System.out.println(one.getInteger());
System.out.println(two.getInteger());
那么问题来了,Integer 包装器类是特殊的吗?为什么它的行为与我在示例中显示的一样?
【问题讨论】:
-
one = 20;和one.setInteger(20);有很大的区别,和包装类无关。第一个 sn-p 的one = 20;将等效于第二个 sn-p 中的one = new OwnInteger(20);。 -
这些类的行为与引用类型完全一样,可能是因为它们是引用类型。当您将一个引用指向不同的对象时,您不会更改另一个指针。指针是独立的。它只是通过指向同一 object 的任何指针可见的对 object 的更改。请记住,正如 JLS 所说,Java“引用......是指针”。
标签: java class types reference wrapper