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