Является ли String s = "foobar" атомом?

Является String s = "foobar"; атомным?

Назначение объектной ссылки должно быть, но я не уверен.

Спасибо.

Ответы

Ответ 1

Да. Все ссылочные назначения являются атомарными в java.

Просто обратите внимание, что составной оператор, такой как String s = new String("foobar"), не является атомарным, поскольку он содержит создание объекта, а затем назначение отдельно.

Также обратите внимание, что "присваивания длинным и двойным переменным могут быть не атомарными", из JLS-17.7

Ответ 2

Да, но если вы беспокоитесь о гоночных условиях, вы должны хотя бы знать о "синхронизированных" методах/блоках.

И обратите внимание, что это не атомно, потому что он содержит две операции:

String s = string_a + string_b;