java - 由于不变性,字符串线程安全?

标签 java string immutability

你好,我在读到一个字符串是线程安全的,因为它是不可变的。

例如我这样做:

String a = "test";

一个线程使用这个变量。 但是另一个线程仍然可以使用这个变量并改变它:

a = a + "something";

所以会不会变?

如果它是易变的,我会明白,它一次只能由一个线程使用。但是不变性并不能保证我做到这一点!?

最佳答案

您不是在更改 a 指向的对象,而是在 a 指向的位置:

String a = "test";

这里a指向一个字符串"test"

a = a + "something";

此处创建了一个新字符串,作为 "test""something" 连接的结果,其中 "testsomething" 其中a指向。这是一个不同的例子。

所以不存在线程安全问题,因为两个线程都有自己的 a 引用相同的 "test" 字符串对象,但是一旦其中一个线程将修改字符串以引用 "testsomething" 对象,另一个线程仍将引用原始的 "test" 对象。

关于java - 由于不变性,字符串线程安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17255771/

相关文章:

java - 如何使 Eclipse 使用 bnd 注释自动生成 OSGi 声明性服务捆绑组件 XML?

java - 对于我的代码,如何实现关键监听器?

java - 在java中将前导0字符串转换为整数

c++ - 在不知道 UTF-8 编码的情况下拆分空白字符上的 UTF-8 编码字符串

java - 为什么 Bloch 声明不可能对集合实现进行子类化?

c# - 如果安全不是问题,那么不可变接口(interface)是一个好的模式吗?

java - 将收到的消息分成两部分

c - C中字符串的所有可能组合

java - 通过工厂模式设置最终变量

java - 如何使用我的系统覆盖按钮调用另一个 Android 应用程序的滚动