У меня есть следующий код:
public class Test{
public static void main(String []args){
String x = "a";
String y = "a";
System.out.println(System.identityHashCode(x) == System.identityHashCode(y)); //true
System.out.println(x.hashCode() == y.hashCode()); //true
y = y+"b";
System.out.println(x); // "a"
System.out.println(y); // "ab"
System.out.println(System.identityHashCode(x) == System.identityHashCode(y)); //false
System.out.println(x.hashCode() == y.hashCode()); //false
}
}
Сначала я создаю 2 строки x и y. Затем я проверяю их HashCodes и они одинаковы, поэтому это означает, что они являются одним объектом и указывают на одну ячейку памяти. Но когда я изменю значение y, значение x не изменится. Если я еще раз проверю их хэш-код, они будут разными, что означает 2 разных объекта и 2 разных места в памяти. Почему это происходит? Почему х не меняется, когда у меняется? (потому что мы просто меняем содержимое одной памяти)
Я использовал хеш-код в качестве этого вопроса.
Обновление: Моя путаница была для 2 причины:
a) Я думал, что одни и те же хеш-коды означают одни и те же объекты (Вы можете взглянуть на этот и этот вопросы для подробного объяснения, почему я не прав .)
b) Строки являются неизменяемыми, и если значение изменяется, создаются новые строки (как объяснено в ответах ниже.)