Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > инициализация строки их сравнение


Автор: aksans 25.1.2011, 22:51
Я наверно задам глупый вопрос, но все же я хочу узнать ответ на его вопрос а сама разобраться не могу.

Код

String a=new String("abc");
String b="abc";
String c="abc";
System.out.println("a=b "+(a==b));
System.out.println("a=c "+(a==c));
System.out.println("c=b "+(c==b));


и в итоге получаю 
a=b false
a=c false
c=b true

первые две строки кажутся логичными потому что сравниваются ссылки на объекты, третья строка подсказывает мне что b и c ссылаются на один объект. Почему так происходит? 

Автор: Temdegon 25.1.2011, 23:01
При инициализации переменных в коде в виде строкового литерала, компилятор создает только один экземпляр этой строки. Т.о. обе переменные ссылаются на один объект.

Автор: aksans 25.1.2011, 23:11
то есть если я потом поменяю значение то создастся еще один объект?

Автор: Temdegon 25.1.2011, 23:20
да. String в Java неизменяемый обькета. Так что при его изменении всегда создается новый экземпляр.

Автор: aksans 25.1.2011, 23:42
понятно. спасибо за разъяснения

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)