ryb*_*usz 5 java types reference class wrapper
我有一个很大的问题需要理解为什么Java中的包装类不像引用类型那样.例:
Integer one = 10;
Integer two = one;
one = 20;
System.out.println(one);
System.out.println(two);
Run Code Online (Sandbox Code Playgroud)
输出将是:
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());
Run Code Online (Sandbox Code Playgroud)
那么问题是,Integer包装类特别吗?为什么它的行为与我在我的例子中所表现的一样?
这正是引用类型的行为.在您的示例中,two引用与one赋值后相同的对象.但是,重新分配one新对象对您没有任何影响two,这是您看到的行为.
例如,您将看到与其他引用对象相同的行为
StringBuilder one = new StringBuilder("10");
StringBuilder two = one;
one = new StringBuilder("20");
// two still references StringBuilder with "10"
Run Code Online (Sandbox Code Playgroud)
为了使引用类在更改一个对象时显示行为也改变另一个,该类需要是可变的,如OwnInteger代码中的类,并且代码需要更改对象,而不是重新分配它.包装类(例如Integer)是不可变的,因此您不会遇到它们的行为.
| 归档时间: |
|
| 查看次数: |
270 次 |
| 最近记录: |