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


Автор: ressac 23.2.2009, 11:17
Код

String s1 = "test";
        String s2 = "test"; 

        if (s1==s2) {
            System.out.println("==");
        } else {
            System.out.println("!=");
        }


получим "=="

Код

        String s1 = "test";
        String s2 = new String("test"); 

        if (s1==s2) {
            System.out.println("==");
        } else {
            System.out.println("!=");
        }


получим "!="


почему? smile


Автор: PashaOvechkin 23.2.2009, 11:57
Есть такая штука в яве. 

Если создаёш 2 одинаковых обьекта так:

Код

String s1 = "test";
String s2 = "test"; 


то при запуске создастся 1 обьект, а s1 и s2 будут на него ссылаться.
Так сделано в целях економии памяти. И с етим нужно быть осторожным... Сам напарывался

Если: 
Код

String s1 = "test";
String s2 = new String("test"); 


то s1 и s2 будут ссылаться каждый на свой обьект. Ето просто нужно знать.
П.С Официальное описание от sun найти не удалось...

Автор: ressac 23.2.2009, 12:07
спасибо

почему-то так и думал smile

Автор: chand0s 24.2.2009, 11:35
to автор топика:

А еще помедитируйте над методом String.intern(), чтобы лучше понять как строки в Java устроены.

Например, этот код опять выведет "=="

Код

        String s1 = "test";
        String s2 = new String("test").intern()
        if (s1==s2) {
            System.out.println("==");
        } else {
            System.out.println("!=");
        }

Автор: lando1 24.2.2009, 13:06
для строк всегда надо .equals() использовать.

Автор: nitzshe 25.2.2009, 12:47
вот здесь можно по теме посмотреть:

http://www.skipy.ru/technics/objCompPr.html#str_equals_vs_eqeq

Автор: Connie 26.2.2009, 10:11
http://forum.vingrad.ru/forum/topic-231836/unread-1.html

Автор: aleksandy 26.2.2009, 10:50
Цитата(PashaOvechkin @ 23.2.2009,  11:57)
П.С Официальное описание от sun найти не удалось...

Строка - это объект, а объекты сравниваются методом equals() вот и все описание

Автор: ShellRaiser 26.2.2009, 12:56
народ, в яве есть такая штука как ссылка на объект
в случае если ты сравниваеш базовые типы, такие как инт, булен, которые не являются объектами классов, то оператор "==" проверяет значения объектов
в случе если же это объекты, то будет проверять не значение а ссылка на объект
т.е.
если я сделяю так:
Код

String s1="s1";
String s2=s1;


то s1==s2 выдаст тру, поскольку они ссылаются на один и тотже объект в памяти

поэтому все строки желательно сравнивать через equals к примеру :
Код

String s1="str";
String s2="str";

if(s1.equals(s2))
{
blablabla;
}


ещё правильным тоном сравнение строк и констан является следущий код:
Код

if("Some String".equals(str1))
{
blablabla;
}


поскольку иногда вы не можете всё предусмотреть и вам придёт налловый объект str1 и токда прилага упадёт с наллпоинтером...

Автор: Kangaroo 26.2.2009, 14:24
Блин, да PashaOvechkin вторым постом уже три дня назад ответил на поставленный вопрос. Зачем каждый заходит и дописывает еще что-то?
Пишите в FAQ тогда уже, полезней будет smile

Автор: ShellRaiser 26.2.2009, 15:22
прокрутил линк) незаметил)
зато никуда ссылаццо не надо)

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