当前位置: 首页 > 知识库问答 >
问题:

为什么在Java中字符串是不可变的?

养鸿运
2023-03-14

共有1个答案

楚昊明
2023-03-14

string是不可变的,原因有几个,下面是一个总结:

  • 安全性:在网络连接、数据库连接URL、用户名/密码等中,参数通常表示为字符串。如果是可变的,则可以很容易地更改这些参数。
  • 同步和并发:使字符串自动不可变可使其线程安全,从而解决同步问题。
  • 缓存:当编译器优化字符串对象时,它会发现如果两个对象具有相同的值(a=“test”和b=“test”),因此您只需要一个字符串对象(对于a和b,这两个对象将指向同一个对象)。
  • 类加载:string用作类加载的参数。如果是可变的,则可能导致加载错误的类(因为可变对象改变了它们的状态)。

话虽如此,string的不可变性仅意味着您不能使用其公共API更改它。实际上,您可以使用反射绕过普通API。请看这里的答案。

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

  • 问题内容: 他们为什么决定使用 Java和.NET(和其他一些语言)使其不可变?他们为什么不使它可变? 问题答案: 根据Effective Java第四章第73页第2版: “这样做有很多充分的理由:不可变的类比可变的类更易于设计,实现和使用。它们不易出错且更安全。 […] “ 不可变对象很简单。不可变对象可以恰好处于一种状态,即创建时的状态。如果确保所有构造函数都建立类不变式,则可以保证这些不变式

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

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

  • 问题内容: 我在不可变字符串上编写了以下代码。 输出: 此处变量的值a已更改(许多人说不能更改不可变对象的内容)。但是,一句话到底是什么String是不变的呢? 问题答案: 在进一步探讨不变性之前,让我们在得出任何结论之前先了解一下类及其功能。 这是如何工作的: 与往常一样,这将创建一个包含的字符串”knowledge”并为其指定一个reference str。很简单?让我们执行更多功能: 让我们

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