porównywanie stringów w Java

0

Witam!
Od niedawna zaintersowałam się pisaniem w Java...wcześniej programowalam w kilku innych językach i w związku z tym mam pytanko.... czy istnieje może jakaś biblioteka lub klasa pozwalająca przeciażać operator == dla zmiennych String w Java? ... po prostu przerabianie wcześniejszego kodu w C++ na Java staje się co najmniej irytujące...dla przykładu zapis:( dotyczny zmiennych z i na typu String, wcześniej zainicjowanych np tak: String z=new String("c3"); String na=new String("d4"); )

if (z=="c3" && na=="d4") { } // robie coś w C++
na :
if (z.equals("c3") && na.equals("d4")) { } // robie coś w Java

...no jest to co najmniej irytujące prawda :-)
a takich instrukcji mam 260 w pewnym programiku, grającym w warcaby ....
proszę o pomoc ...Ola

0

niestety nie da się przeciążać, jak masz tego aż 260 to spróbuj może wyrażeniami regularnymi to "zreplacować"

0

dzieki... jedyne co mi przychodzi to zmudne znajdź i zamień :-)... wyrazenia regularne bardzo sie przydają w pracy gdzie zawodowo grzebie w Unix... kiedys napisalam cos podobnego do awk w C++....ale daleko mu bylo do oryginalu :-)... sorry za brak ogonkow --- strata czasu :-)

ps. w sumie przesiadka z C++ do Java jest calkiem prosta ( pomijajac takie wlasnie pulapki)... bo zapis:
if(z =="c3") { } //ble ble... javac łyka bezbolesnie.... niestety ten warunek nigdy sie nie spelnia :-)
... o wiele trudniejsza wydaje sie przesiadka do okienek... a zwlaszcza obsluga zdarzeń buttonow, myszy itp.... kochany Builder ma JBuildera...niestety komercyjny...zas Net Bens, Eclipse i jemu podobne nie są juz tak intuicyjne ... na razie... bo ciągle przybywa fanów :-)
pozdro Ola ... pobierz moj programik WarcaboweABC ...z http://warcaby64.republika.pl :-)

0

Przy zapisie ref1==ref2 javac nie zgłosi błędu ponieważ jest to prawidłowe porównywanie referencji . Jeżeli obie referencje wskazują na ten sam obiekt wtedy wyrażenie ma wartość true.

Jednak z porównywaniem stringów;) jest pewien myk.

Poniższy kod wyświetli na konsoli 'true'

String s1 = "xyz",
         s2 = "xyz";

System.out.println(s1==s2);

Chodzi o zastosowanie operator new. Gdy tworzymy obiekt String bezposrednio, a nie przy pomocy new, operator '==' daje wynik taki jak metoda 'equals'. Nie wiem dlaczego tak jest, chętnie bym sie dowiedział.

0

dlatego ze jak tak tworzysz string, za pomoca litaralu, to java umieszcza taki string w wewnetzrnym poolu stringow, i pozniej wykorzystuje ponownie ten string. jesli wiec robisz tak jak pokazales, pierwsze wywolanie trzony nowy string i umieszczas go w poolu, natomiast drugie bierze ten string juz jakby z tego poola, a wiec jest to ten sam obiekt. mozna samemu umieszcic, programistycznie, string w pool, sluzy do tego metoda String.intern()
pozdr

0

@mokra_ola, Eclipse ma kilka wtyczek do tworzenia GUI jak w visualach.
@WeedSmoker, problemem jest to że tworzymy tak naprawdę jeden obiekt. JVM robi z tego jedną referencję (coś w styli String s1 = s2 = "asd"). Jest to jeden z haków które są na SCJP. Taka mała oszczędność pamięci :) Jednocześnie jakikolwiek manewr na obiekcie spowoduje utworzenie nowego obiektu i problem dwóch zmiennych wskazujących na to samo w praktyce znika :)

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