字符串线程安全性因为不变性?

kra*_*moe 2 java string immutability

您正在阅读一个字符串是线程安全的,因为它是不可变的.

例如我做:

String a = "test";
Run Code Online (Sandbox Code Playgroud)

一个线程使用此变量.但另一个线程仍然可以使用此变量并更改它:

a = a + "something";
Run Code Online (Sandbox Code Playgroud)

所以它会改变与否?

如果它是易失性的,我会得到它,它一次只能被一个线程使用.但不可靠性并不能保证我这个!?

zmo*_*zmo 5

您没有更改指向的对象a,但a指向的位置:

String a = "test";
Run Code Online (Sandbox Code Playgroud)

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

a = a + "something";
Run Code Online (Sandbox Code Playgroud)

这里一个新的字符串作为串接的结果产生"test"和"something",这"testsomething"其中一个点.这是一个不同的例子.

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