Operator ==

0

Witam. Operator == w Javie służy do referencji. Więc mam pytanie czemu poniższy kod daje wartość true?

public class Glowna {


	public static void main(String[] args) {
		
		int a = 0;
		int b = 0;
		
		b = 10;
		a = 10;
		
		if (a == b) {
			System.out.println("Rowne");
		} else
			System.out.println("Nie rowne");
	}

}
 

Czyżby zmienna a i b otrzymywały to samo miejsce w pamięci. Wcześniej szukałem czegoś podobnego na temat Stringów w Javie i wyczytałem, że przy inicjalizacji zmienneych w następujący sposób

 
		String a = "ABCD";
		String b = "ABCD";

Porównanie ich za pomocą == da wynik true, ponieważ przy takiej inicjalizacji kompilator korzysta z jakiejś puli referencji? A w przypadku gdy byśmy zadeklarowali zmienną w taki sposób String b = new String("ABCD"); da nam wynik false. Przetestowałem to i faktycznie tak to działa na obiektach. I tutaj moje pytanie jak jest w przypadku zwykłych zmiennych jak int, double itp. Czy jeśli dajemy np. takie same wartości a = 10 i b = 10 to zmienna b otrzymuje to samo miejsce w pamięci co a ponieważ ma taką samą wartość i kompilator korzysta z tej tzw. puli referencji?

1

Nie, tworząc zmienną int a; tworzysz prymityw, a nie złożony obiekt jakim jest Integer. a tu nie jest referencją.
Tu masz coś na ten temat: http://mindprod.com/jgloss/intvsinteger.html
Poczytaj jeszcze o autoboxingu prymitywów.

0

Ok. W linku, którym podałeś jest: Calculate with it, + - * / % ^ etc. przy Integer jest x. Ale poniższy kod daje wynik 10 i jest wszystko ok.

public class Glowna {


	public static void main(String[] args) {
		
		Integer a = new Integer(5);
		Integer b = new Integer(5);
		Integer c = new Integer(0);
		
		c = a + b;
		System.out.println(c);
	}

}

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