这可能是有史以来问过的最愚蠢的问题,但我认为对于一个Java新手来说,这是相当令人困惑的
- 有人能澄清什么是不可变的吗
- 为什么
字符串是不可变的 - 不可变对象的优点/缺点是什么
- 为什么像
StringBuilder这样的可变对象应该优先于字符串和反之亦然
一个很好的例子(在Java中)将非常感谢
不可变意味着一旦对象的构造函数完成了执行,该实例就不能被更改
这很有用,因为这意味着您可以传递对对象的引用,而不用担心其他人会更改其内容特别是在处理并发性时,永远不会更改的对象没有锁定问题
e、 g
类Foo
{
私有最终字符串myvar;
public Foo(最终字符串初始值)
{
this.myvar=初始值;
}
公共字符串getValue()
{
返回this.myvar;
}
}
Foo不必担心getValue()的调用方可能会更改字符串中的文本
如果您设想一个类似于Foo的类,但是成员是StringBuilder而不是String,那么您可以看到getValue()的调用方能够更改Foo实例的StringBuilder属性
还要注意您可能会发现的不同类型的不变性:Eric Lippert写了一篇关于这一点的博客文章。基本上,您可以拥有接口不可变但在幕后实际可变的私有状态(因此不能在线程之间安全共享)的对象