str
- это локальная переменная, область действия которой ограничена методом run()
, в котором она определена. Для разных потоков должны быть разные str
s.
Однако, оба этих различных локальных str
s указывают на строку "hello", которая в качестве константы времени компиляции равна interned . То есть один экземпляр String с таким содержимым создается в пуле, и все, что указывает на один и тот же набор символов, будет указывать на этот же объект.
Это как если бы вы создали статический экземпляр такой строки.