Porównywanie obiektów typu String

0

Dlaczego wyjście poniższych programów jest różne? Z góry dziękuję za pomoc.

 ...
        String a = new String("aaa");
        cmp("aaa", a);
    }
    static void cmp(String a, String b) {
        if(a == b) System.out.println("rowne");
        if(a.equals(b)) System.out.println("rowne2");
    }// out: rowne2
 ...
        String a = "aaa";
        cmp("aaa", a);
    }
    static void cmp(String a, String b) {
        if(a == b) System.out.println("rowne");
        if(a.equals(b)) System.out.println("rowne2");
    }// out: rowne rowne2
0

bo stringi w jawie porównuje się tylko przez equals();

0

Kolejnym powodem jest to, że takie same literały są trzymane w tym samym miejscu pamięci, więc w pierwszym przykładzie referencje a i b pokazują na różne obiekty, a w drugim na te same.

0

@siema i @zjarek, wyjaśniliście cokolwiek? Stringi porównuje się metodą equals(). Ale kompilator może zauważyć, że tworzysz dwa Stringi o jednakowej zawartości i nie rezerwować dla drugiego miejsca w pamięci, powstaną wtedy dwie referencje do tego samego miejsca w pamięci i operator == zadziała tak jak equals().

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