这与Is String s = "foobar" atomic?有关。我有点困惑的答案那里...分配是原子的,没关系。但是,如果我们有
String s = "s";
执行此行的步骤不是 1 - 为引用s分配一个新String实例的位置(所以它实际上不是null,即使新String的构造函数尚未运行) 2 - 运行构造函数?
所以,只有这个任务应该原子地发生的时间才是" s"是实习生?
这究竟是如何读取部分构造的对象?
不重复 - 我的问题不是赋值是否是原子的。我的问题是如果" s"尚未实习(在转让时实际上并不存在)以及是否可能。
答案 0 :(得分:3)
是的,这是一个原子操作。 也许这会有所帮助(http://php.net/manual/en/function.system.php):
String类型的编译时常量表达式总是“实例化”,以便使用String.intern方法共享唯一实例。
此外,字符串文字始终引用类String的相同实例。这是因为字符串文字 - 或者更常见的是作为常量表达式(第15.28节)的值的字符串 - 被“实例化”以便使用String.intern方法共享唯一实例。
所以我不确定这里是否调用了String构造函数。