Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Lamerskij Wopros
Форум программистов > Системное программирование > Java
tansa
Est wot takaja zabawa
public class ttt
{
        private ttt()
        {
                String S1="bbb";     //!!!!!!!!!!!!!!!!
                String S2="bbb";     //!!!!!!!!!!!!!!!!
        }

        public static void main(String args[])
        {
                ttt A = new ttt();
                if (A.S1==A.S2) System.out.println("rawno");
                System.exit(0);
        }
}


Pochemu esli zmenit' w otmechennyh strokah wyrazenie
String S1 ="bbb";
, na
String S1 = new String("bbb");

to w if uzhe ne whodit?

t.e. ja ponimaju, chto eto raznye ukazateli i ja tolko proweriaju na odin li objekt oni pokazywajut(duraku poniatno, chto net), no togda pochemu oni rawny pri inicializacii kak w nachale?
LuMee
Потому что в первом случае, когда ты пишешь String S2="bbb", ява-машина на самом деле не станет создавать новый объект, а возьмет объект "bbb", созданный строкой выше (такое допустимо, ибо объекты String неизменяемы) и присвоит твоей переменной.
Во втором случае ты принудительно создаешь новый объект, и тут уже получается два разных объекта (и разные указатели, соот-но), содержащие одну и ту же строку.
tansa
Spasibo...
Togda u menia rozhdaetsia eshe odin wopros...
esli ja sdelaju
S1=S1.concat(S2);

to chto k chemu on prikleit?

t.e. chto budet w S1 mne poniatno, a chto okazhetsia w S2?
Pete
Во-первых сравнивать строки надо только через equals, через == сравниваются только ссылки. Во-вторых String неизменяемый объект, так что S2 не изменится, а при склейке строк будет создан новый объект и ссылка на него будет присвоена S1.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2008 IPS, Inc.