Java String实例化和赋值原子性

时间:2015-09-03 20:35:17

标签: java multithreading atomic

这与Is String s = "foobar" atomic?有关。我有点困惑的答案那里...分配是原子的,没关系。但是,如果我们有

String s = "s";

执行此行的步骤不是 1 - 为引用s分配一个新String实例的位置(所以它实际上不是null,即使新String的构造函数尚未运行) 2 - 运行构造函数?

所以,只有这个任务应该原子地发生的时间才是" s"是实习生?

这究竟是如何读取部分构造的对象?

不重复 - 我的问题不是赋值是否是原子的。我的问题是如果" s"尚未实习(在转让时实际上并不存在)以及是否可能。

1 个答案:

答案 0 :(得分:3)

是的,这是一个原子操作。 也许这会有所帮助(http://php.net/manual/en/function.system.php):

  

String类型的编译时常量表达式总是“实例化”,以便使用String.intern方法共享唯一实例。

     

此外,字符串文字始终引用类String的相同实例。这是因为字符串文字 - 或者更常见的是作为常量表达式(第15.28节)的值的字符串 - 被“实例化”以便使用String.intern方法共享唯一实例。

所以我不确定这里是否调用了String构造函数。