Lamerskij Wopros

Тема в разделе "Java", создана пользователем tansa, 27 апр 2007.

Статус темы:
Закрыта.
  1. tansa

    tansa Гость

    Est wot takaja zabawa
    Код (Text):
    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
    Код (Text):
    String S1 ="bbb";
    , na
    Код (Text):
    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?
     
  2. LuMee

    LuMee Well-Known Member

    Регистрация:
    2 май 2006
    Сообщения:
    477
    Симпатии:
    0
    Потому что в первом случае, когда ты пишешь String S2="bbb", ява-машина на самом деле не станет создавать новый объект, а возьмет объект "bbb", созданный строкой выше (такое допустимо, ибо объекты String неизменяемы) и присвоит твоей переменной.
    Во втором случае ты принудительно создаешь новый объект, и тут уже получается два разных объекта (и разные указатели, соот-но), содержащие одну и ту же строку.
     
  3. tansa

    tansa Гость

    Spasibo...
    Togda u menia rozhdaetsia eshe odin wopros...
    esli ja sdelaju
    Код (Text):
    S1=S1.concat(S2);
    to chto k chemu on prikleit?

    t.e. chto budet w S1 mne poniatno, a chto okazhetsia w S2?
     
  4. Pete

    Pete Гость

    Во-первых сравнивать строки надо только через equals, через == сравниваются только ссылки. Во-вторых String неизменяемый объект, так что S2 не изменится, а при склейке строк будет создан новый объект и ссылка на него будет присвоена S1.
     
Статус темы:
Закрыта.

Поделиться этой страницей