Lamerskij Wopros

  • Автор темы tansa
  • Дата начала
Статус
Закрыто для дальнейших ответов.
T

tansa

Гость
#1
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

Well-Known Member
02.05.2006
477
0
#2
Потому что в первом случае, когда ты пишешь String S2="bbb", ява-машина на самом деле не станет создавать новый объект, а возьмет объект "bbb", созданный строкой выше (такое допустимо, ибо объекты String неизменяемы) и присвоит твоей переменной.
Во втором случае ты принудительно создаешь новый объект, и тут уже получается два разных объекта (и разные указатели, соот-но), содержащие одну и ту же строку.
 
T

tansa

Гость
#3
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?
 
P

Pete

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