Java SE 1.6

Odpowiedz Nowy wątek
2011-08-25 20:00
0

Witam, jaka jest różnica między

String s = "a";

a

String s = new String("a");

?
Jakaś różnica tam jest, bo jak porównam przy wykorzystaniu equals albo zwykłym operatorem równości == to zwraca wartość false. Za uprzejme zaspokojenie mojej upierdliwej ciekawości z góry dziękuję ;)

Pozostało 580 znaków

2011-08-25 20:05
0

"a" znajdzie się w puli Stringów dla danego pliku .class. Jeżeli masz wiele zmiennych w jednym pliku zainicjalizowanych tym samym Stringiem, tzn:

String a1 = "a";
String a2 = "a";

Wtedy operator == powinien dla nich zwrócić true, bo to referencje do tego samego Stringa. Z drugiej strony za pomocą zapisu:

String s = new String("a");

Wymuszasz stworzenie nowego Stringa, obojętne czy był już w puli czy nie.

Ogólnie nie wolno porównywać Stringów za pomocą operatora ==. Gdyby mój (współ)pracownik w ten sposób porównywał Stringi (albo jakiekolwiek inne obiekty) to podziękował bym mu za współpracę. String.equals() to jedyna metoda do sprawdzania identyczności Stringów.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.

Pozostało 580 znaków

2011-08-25 20:10
0

No tak, jedynie typy podstawowe można porównywać w ten sposób. Dzięki za odpowiedź :)
P.S. Ja bym gościowi kazał wszystko poprawić i zmienić nawyk ;) Why so serious?

edytowany 1x, ostatnio: hubert.s, 2011-08-25 20:13
Może trochę przesadziłem. A może nie. W sumie świadczy to o kompletnej nieznajomości podstaw Javy. - Wibowit 2011-08-25 22:27

Pozostało 580 znaków

2011-08-25 22:07
0

Właśnie dlatego brakuje mi przeładowania operatorów w javie, o ile byłoby to wygodniejsze, móc napisać swój własny operator==


Operatory dowolnego rodzaju możesz sobie zaklepać w Scali :) - Wibowit 2011-08-25 22:26
ostatnio skłaniam się w stronę C#, ale kto wie, może następna będzie Scala (im więcej poznanych narzędzi tym lepiej) ;) - byku_guzio 2011-08-25 22:36

Pozostało 580 znaków

2011-08-26 00:24
02Eh
0
Wibowit napisał(a)

String.equals() to jedyna metoda do sprawdzania identyczności Stringów.

Czyzby? ;)

[hint: graf dziedziczenia]

No chyba przez compareTo nie będziesz sprawdzał, bo po co? - Wibowit 2011-08-26 00:28

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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