Jon*_*eet 22
任何没有给你任何改变其中数据的方法的类型都是不可变的 - 就这么简单.是的,所有原始包装类型都是不可变的1,原样String.UUID,URL和URI其他示例.
虽然Calendar并Date在内置的Java API是可变的,很多中类型的乔达时间是不变的-而在我看来,这是一个原因,约达时间是更容易使用.如果一个对象是不可变的,你可以在代码中的其他地方保留对它的引用,而不必担心其他一些代码是否会进行更改 - 更容易推理你的代码.
1我的意思是java.lang.Integer等等.如其他地方所述,这些Atomic*类是可变的,实际上必须是为了达到它们的目的.在"标准原始包装类集"和"包装原始值的类集"之间存在差异.
您可以非常轻松地编写自己的可变包装类:
public class MutableInteger
{
private int value;
public MutableInteger(int value)
{
this.value = value;
}
public int getValue()
{
return value;
}
public void setValue(int value)
{
this.value = value;
}
}
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,包装类本身没有任何不可变性 - 只是标准的设计是不可变的,因为它没有提供任何改变包装值的方法.
请注意,这允许在装箱时重复使用相同的对象,对于常见值:
Integer x = 100;
Integer y = 100;
// x and y are actually guaranteed to refer to the same object
Integer a = 1000;
Integer b = 1000;
// a and b *could* refer to the same object, but probably won't
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14766 次 |
| 最近记录: |