Вы создаете один объект.JVM создаст другой закулисный объект, потому что он интернирует строку, созданную константой при загрузке класса, но это вещь JVM ( вы не просили его intern
).И, что более важно, вы можете быть совершенно уверены, что, сделав:
String s1 = new String("abcd");
один раз, тогда
String s2 = new String("abcd");
создаст только один объект.
JVMсоздает другой (первый) объект String
при загрузке класса: компилятор помещает строку в область строковых констант в файле .class
.Они считываются в пул констант класса и интернированы при загрузке класса.
Так, когда эта строка кода выполняет , одинString
создано.Но факт наличия этой строки в классе создает два: один для константы, которая создается при загрузке класса, и один для этой строки кода.