当前位置: 首页 > 面试题库 >

为什么字符串在Java和.NET中不可变?

年运珧
2023-03-14
问题内容

他们为什么决定使用String Java和.NET(和其他一些语言)使其不可变?他们为什么不使它可变?


问题答案:

根据Effective Java第四章第73页第2版:

“这样做有很多充分的理由:不可变的类比可变的类更易于设计,实现和使用。它们不易出错且更安全。

[…]

“ 不可变对象很简单。不可变对象可以恰好处于一种状态,即创建时的状态。如果确保所有构造函数都建立类不变式,则可以保证这些不变式在所有时间都保持为真。你无需付出任何努力。

[…]

不可变的对象本质上是线程安全的。他们不需要同步。它们不能被同时访问它们的多个线程破坏。这无疑是实现线程安全的最简单方法。实际上,没有线程能够观察到另一个线程对不可变对象的任何影响。因此, 不可变的对象可以自由共享

[…]

同一章的其他几点:

你不仅可以共享不可变的对象,还可以共享它们的内部。

[…]

不可变的对象是可变或不可变的其他对象的重要构建块。

[…]

不变类的唯一真正的缺点是,对于每个不同的值,它们都需要一个单独的对象。



 类似资料:
  • 据我所知, 可变字符串可以更改,不可变字符串不能更改。 这里我想这样改变字符串的值, 另一种方法是, 在这两种情况下,我都试图改变str的值。谁能告诉我,这两种情况的区别是什么,让我清楚地了解可变和不可变对象。

  • 本文向大家介绍为什么字符串对象在Java中是不可变的?,包括了为什么字符串对象在Java中是不可变的?的使用技巧和注意事项,需要的朋友参考一下 通常,字符串用于表示重要细节,例如数据库连接URL,用户名密码等。字符串的不变性有助于使这些细节保持不变。 类似地,在加载类时,将String用作参数。那时,更改字符串可能会导致加载错误的类。 如果不可变,则变量(字符串)自动为线程安全的。

  • 问题内容: 据我所知, 可变字符串可以更改,而不变字符串则不能更改。 在这里我想这样改变String的值, 而另一种方式是 在这两种情况下,我都试图更改的值。谁能告诉我,这两种情况有什么区别,让我清楚地了解可变和不可变的对象。 问题答案: 情况1: 在上面的代码中,您将创建3个对象。 “好”它将进入 字符串池 。 “早晨”也进入 字符串池 。 通过合并“ Good”和“ Morning”创建的“

  • 我是java编程的新手。而且我不明白为什么string对象在Java中是不可变的。

  • 问题内容: Python具有内置函数,实际上等效于: 适用于所有类型的参数(字符串除外)。它适用于数字和列表,例如: 为什么特地省去了弦乐? 我似乎还记得在Python列表中进行讨论的原因,因此可以使用一个解释或指向该解释的线程的链接。 编辑 :我知道标准方法是这样做。我的问题是为什么禁止对字符串使用sum的选项,而列表却没有禁止。 编辑2 :尽管我认为给出所有好的答案都 不需要这样做 ,但问题是