Zaczynam przygodę z Java i korzystam sobie z książki 'Jacek Rumiński – Język JAVA' Jestem na rozdziale związanym z typami i mam pewien problem ze zrozumieniem wyników działania poniższego kodu:
public class Typy {
/**
* aplikacja ukazująca różne typy danych podstawowych i klasy typów danych.
*/
public static void main(String[] args) {
boolean prawda[] = new boolean[2];
prawda[0]=true;
byte bajt = (byte)0;
int liczba = 127;
long dluga = 123456789L;
char znak1 = '\u0104'; //w Unicodzie kod litery ‘Ą’
char znak2 = 'ą';
char znaki[] = {'M', 'O', 'C'};
System.out.println("Oto zmienne: ");
System.out.println("boolean[0]= "+prawda[0]);
System.out.println("boolean[1]= "+prawda[1]+" wartość domyślna, bezdeklaracji");
System.out.println("byte= "+bajt);
System.out.println("int= "+liczba);
System.out.println("long= "+dluga);
System.out.println("char= "+znak1);
System.out.println("char= "+znak2);
Integer liczba1 = new Integer(liczba);
//liczba1 = 100;
bajt = liczba1.byteValue();
System.out.println("byte= "+bajt);
String str = new String(znaki);
System.out.println(str);
}
}
Wynikiem działania tego kodu jest:
Oto zmienne:
boolean[0]= true
boolean[1]= false wartość domyślna, bezdeklaracji
byte= 0
int= 127
long= 123456789
char= Ą
char= ą
byte= 127
MOC
I to rozumiem bo zmienna bajt jest typu byte:
typ liczbowy, jednobajtowy za znakiem. Wartości tego typu mieszczą
się w przedziale: -128 do 127.
Co prawda nie rozumiem tego zapisu
byte bajt = (byte)0;
po co to (byte)0 nie mogłoby być samo zero od razu?
Ale zacząłem sobie kombinować i wpisałem 128 czyli powyżej zakresu byte czyli
byte bajt = (byte)128;
wynikiem tego jest byte= -128 i tu juz nie wiem dlaczego tak? Jeśli teraz zwiększe znowu liczbę o jeden to wynik zmniejszy się o jeden czyli dla 129 będzie -127 itd? Jak to rozumieć?
Teraz dalej jest taki fragment kodu:
Integer liczba1 = new Integer(liczba);
bajt = liczba1.byteValue();
Powiedzcie mi czy dobrze rozumiem: Tworzymy obiekt liczba1 klasy Integer przez konstruktor Integer(liczba) gdzie liczba to nasza wcześniej zadeklarowana zmienna:
int liczba = 127;
czyli obiekt liczba1 w jakimś swoim wewnętrznym polu zapamięta wartość liczba czyli w tym przypadku 127.
Następnie do zmiennej bajt też już wcześniej zadeklarowanej przypisujemy nową wartość liczba1.byteValue() i tu mam pytanko, ja rozumiem to tak, że obiekt liczba1 korzystając z metody byteValue():
Returns the value of this Integer as a byte.
Zwróci wartość Integer jako byte, czyli dokona konwersi typu Integer na typ byte?
'\u0104' czy to jest w hex?
Sorki że trochę przydługie ale wytłumaczcie i to.