Следующий код печатает «false»:
a := 'aaa'.
b := a deepCopy.
Transcript show: (a == b).
Я действительно ожидаю такого поведения, и мое объяснение этому будет заключаться в том, что deepCopy возвращает новый объект «b», который является совершенно другим объектом, чем «a», и поскольку оператор «==» сравнивает по ссылке, результат «ложь». Это правильно?
Однако я не понимаю, почему следующий код выдает "true":
a := 'aaa'.
b := 'aaa'.
Transcript show: (a == b).
Здесь мы сделали два присваивания двум разным объектам, "a" и "b", и между ними не должно быть никакой связи, кроме того факта, что они содержат одно и то же значение. Но если оператор "==" сравнивает по ссылке, а не по значению, то почему результат этого сравнения "истинный"?
false
. Во втором случае компилятор/интерпретатор, очевидно, решил, чтоa
иb
будут ссылаться на один и тот же строковый объект, так как значения одинаковы и это экономит память, поэтомуtrue
. - person lurker   schedule 14.07.2015