У меня есть этот код
Строка пулы после изменения строки
String a="test";
String b="test";
if(a==b)
System.out.println("a == b");
else
System.out.println("Not True");
И каждый эксперты Java знает, что здесь if(a==b)
будет принят из-за String pooling facility.
Согласно Струнный Объединив
Each time your code creates a string literal, the JVM checks the string literal pool first. If the string already exists in the pool, a reference to the pooled instance is returned. If the string does not exist in the pool, a new String object is created and placed in the pool. JVM keeps at most one object of any String in this pool. String literals always refer to an object in the string pool
и то, почему в коде выше прошло условие.
Теперь здесь возникает вопрос .В приведенном выше коде, когда я добавил две дополнительные линии a+="1"
и b+="1"
то теперь значения натянуть & б будет Test1
.
Нового код будет как этого
String a="test";
String b="test";
if(a==b)
System.out.println("a == b");
else
System.out.println("Not True");
a+="1"; //it would be test1 now
b+="1"; //it would also be test1 now
if(a==b)
System.out.println("a == b");
else
System.out.println("Not True");
Теперь после изменения строки, когда я поместил if(a==b)
чек, то он не passed.I знает, что это происходит из-за неизменности особенности строки Но я хочу знать
1) После изменения, хранит ли JVM их два разных объекта?
2) Позволяет ли JVM звонить new String()
для изменения любой строки?
3) Почему они не ссылаются ни на один, даже я пытался позвонить intern()
во время изменения?
Q3 Подсказка:a+="1".intern();
b+="1".intern();
Домашнее задание предупреждение. –
@ThomasW, если вы думаете об этом даже после такого подробного объяснения, я действительно хочу молиться за свои мысли. – Freak