Operator == w javie a stringi

2015-02-13 01:13
Czarny Kot
0

Mam pytanie, chodzi o Java

String text = "Ala";
if( text == "Ala")

Mam napisane że będzie to prawdopodobnie true, dlaczego?
Kojarze też te pytanie z rozmowy kwalifikacyjnej i jak zrozumiałem to Java rozpoznaje te same stringi, więc w if'e lokując stałą tekstową "Ala" w pamięci wskaźe na już istniejącą Ala, na którą wskazuje text. Dobrze myślę?

dodanie znacznika <code class="java"> - @furious programming

edytowany 1x, ostatnio: furious programming, 2016-12-13 18:26
Wstawiaj kod w znaczniki kolorujące składnię; - furious programming 2015-02-13 02:22

Pozostało 580 znaków

2015-02-13 08:05
1

Wykonaj poniższy kod:

String txt = "Ala";
System.out.println(txt == "Ala");
System.out.println(txt == new String("Ala"));
System.out.println(txt == new String("Ala").intern());

i zajrzyj tu https://docs.oracle.com/javas[...]lang/String.html#intern%28%29


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
edytowany 1x, ostatnio: bogdans, 2015-02-13 08:07

Pozostało 580 znaków

2015-02-13 08:11
0

Znak == w Javie nie jest do porównywania wartości, lecz sprawdza on referencje do obiektów są równe, a łańcuch znaków jest interowany. Ten przykład akurat zwróci true ale

String test1 = new String("test");
String test2 = new String("test");

if(test1 == test2) // zwraca false

"Chodzenie po wodzie i tworzenie oprogramowania wg specyfikacji są łatwe, o ile woda i specyfikacja są zamrożone" - Edward V. Berard
edytowany 1x, ostatnio: Madaoo, 2015-02-13 08:58

Pozostało 580 znaków

2015-02-13 08:24
Pijany Orzeł
0

Zastanawia mnie czy ktoś kiedykolwiek celowo chciał porównać referencje dwóch stringów
Dla mnie rozwiązanie z C# gdzie porównywana jest domyślnie wartość jest dużo bardziej logiczna i programmer-friendly - jak się chce porównać referencje to robi się to przez object.ReferenceEquals lub rzutuje na object i nie ma żadnych zonków

Pozostało 580 znaków

2015-02-13 08:57
0

1) Jeżeli dodajesz jakiemuś enumowi parametr będący stringiem (np. jakimś komunikatem) i chcesz sprawdzić czy ten komunikat to na pewno ten o który Ci chodzi to możesz porównać referencje.

2) Gdy coś jest bardzo nastawione na wydajność możesz internować stringi i porównywać je po referencjach.

3) I wreszcie, przeciążając jakąkolwiek metodę equals najpierw sprawdzasz operatorem porównania bo jeżeli referencje są takie same to obiekt na pewno też.

Zasadniczo jednak wygodniej byłoby zamienic == z equals() i dodać equalsReference(). Z tym że c# wyciągnął z javy co najlepsze a błędy zmienił. Java takiej szansy nie miała.

Pozostało 580 znaków

2015-02-13 08:58
1

Java nie ma możliwości przeładowania operatorów i dlatego tak to wygląda.

edytowany 1x, ostatnio: furious programming, 2015-02-13 16:36

Pozostało 580 znaków

2015-02-13 08:59
0

@Pijany Orzeł stringów jak stringów ale porównywanie tożsamości obiektów się zdarza. A to czy referencje porównujesz przez == czy .equals() czy odwrotnie to szczegół. Jednocześnie java nie daje możliwości przeładowania operatorów i tu jest pies pogrzebany ;)


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...

Pozostało 580 znaków

Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0