Zagadka z równością dwóch Byte-ów.

Odpowiedz Nowy wątek
2011-09-05 00:14
0

Witam,
Bawiąc się - poznając klasę Byte napisałem kod :

1   Byte byte1 = 5;
2   Byte byte2 = new Byte((byte) 5);
 
3   System.out.println("byte1 = " + byte1);
4   System.out.println("byte2 = " + byte2);
 
5   System.out.println("byte1 == byte2 ? " + (byte1 == byte2));
6   System.out.println("byte1.equals(byte2) ? " + byte1.equals(byte2));
7   System.out.println("byte2 == 5 ? " + (byte2 == 5));
8   System.out.println("byte1 == 5 ? " + (byte1 == 5));

Wynik działania tego kodu to :

byte1 = 5
byte2 = 5
byte1 == byte2 ? false
byte1.equals(byte2) ? true
byte2 == 5 ? true
byte1 == 5 ? true

Dlaczego w 5-tej linijce jest false a w 7-mej i 8-mej true ?
Pozdrawiam

Pozostało 580 znaków

2011-09-05 00:46
ŁF
1

5 - obiekt byte1 nie jest obiektem byte2. 7 i 8 - zawartość obiektów jest równa 5.


Pozostało 580 znaków

2011-09-05 01:22

Chyba nie do końca. byte1 jest obiektem typu Byte, zachodzi tutaj autoboxing(opakowanie prymitywa w obiekt).
Metoda Equals porównuje zawartość tych obiektów, a operator == porównuje referencje(czy pokazują na to samo miejsce w pamięci) - dlatego 5 zwróciło false(byte1 i byte2 to dwa różne obiekty).
Natomiast w 5 i 6 zachodzi unboxing - dane z obiektów są wyciągane i dopiero wtedy porównywane z literałem.


Pozostało 580 znaków

2011-09-06 11:39
0

Właśnie. Ci co zaczynają przygodę z JAVĄ jak czegoś nie doczytają to mają problem. No ja też kiedyś miałem pytanie na rozmowie kwalifikacyjnej pytanie jak porównać dwa obiekty typu String. Dla tego kto nie doczytał o metodzie equals() mogło by się wydawać, że to jakieś głupie pytanie.


Wcale nie głupie, jeśli nie wiesz o equals to myślenie o pracy jako zawodowy programista odłóż na potem. - stupidman 2011-09-06 11:55
Nie rozumiem Twojej nielogicznej wypowiedzi. "jeśli nie wiesz o equals to myślenie o pracy jako zawodowy programista odłóż na potem " czy to tyczy się mnie ? Bo nie wiem o co Ci chodzi. - kadoel 2011-09-06 12:00
Pewnie, że Ciebie. O equals nie wiedzieć powinni tylko żółtodzioby, albo osoby, które Javę znają góra 10 dni. - stupidman 2011-09-06 12:12
"No ja też kiedyś miałem pytanie na rozmowie kwalifikacyjnej pytanie jak porównać dwa obiekty typu String. Dla tego kto nie doczytał o metodzie equals() mogło by się wydawać, że to jakieś głupie pytanie. " Nie napisałem, że nie znałem odpowiedzi na to banalne pytanie. Nie napisałem, że nie znam meotody equals(). Reasumując wciąż nie rozumiem nielogicznego celu Twojej wypowiedzi. Na przyszłość czytaj uważnie. Po co pisać komentarze, aby komuś dogryźć i pokazać, że jest się "super specem" , i można sobie coś udowodnić poczuć się dowartościowanym człowiekiem ;p. - kadoel 2011-09-06 12:19
Kompromitacja z mojej strony, sorry za to nieporozumienie. - stupidman 2011-09-06 12:45
Spoko, każdemu to się może zdarzyć, mi nie raz.... - kadoel 2011-09-06 12:56

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