// Dla każdego z 8 typów prostych istnieje odpowiadająca mu klasa ("opakowaniowa"?), tzw. "wrapper".
// Obiekt klasy wrapper zawiera w sobie wartość danego typu.
// Wszystkie klasy wrapperów są NIEMUTOWALNE, tzn. wartość w obiekcie nigdy nie ulega zmianie; /na zmienną typu wrapper można wpisać nowy obiekt, ale to nie to samo./
inti=103;
// Obiekt klasy opakowaniowej na podstawie wartości można utworzyć:
// - za pomocą konstruktora (obecnie niezalecane)
Integerii1=newInteger(i);
// - za pomocą metody valueOf
Integerii2=Integer.valueOf(i);
// - za pomocą automatycznej konwersji (autoboxing, od Javy 5); wewnętrznie jest to realizowane za pomocą valueOf
Integerii3=i;
bytey=15;
Byteyy1=newByte(y);
Byteyy2=Byte.valueOf(y);
Byteyy3=y;
shorts=10_000;
Shortss1=newShort(s);
Shortss2=Short.valueOf(s);
Shortss3=s;
longl=4_000_000L;
Longll1=newLong(l);
Longll2=Long.valueOf(l);
Longll3=l;
floatf=3.14F;
Floatff1=newFloat(f);
Floatff2=Float.valueOf(f);
Floatff3=f;
doubled=1.4142;
Doubledd1=newDouble(d);
Doubledd2=Double.valueOf(d);
Doubledd3=d;
charc='A';
Charactercc1=newCharacter(c);
Charactercc2=Character.valueOf(c);
Charactercc3=c;
booleanb=true;
Booleanbb1=newBoolean(b);
Booleanbb2=Boolean.valueOf(b);
Booleanbb3=b;
// Dodatkowo istnieje klasa Void, odpowiadająca typowi void.
// Zmienna/funkcja typu int MUSI mieć/zwracać jakąś wartość. Każdy ciąg bitów w zmiennej typu prostego oznacza jakąś konkretną wartość.
// Zmienna typu obiektowego może wskazywać na obiekt LUB mieć wartość null. null może być traktowany jako dodatkowa wartość oznaczająca brak danych/brak wyniku
// Współcześnie bardziej zalecane do tego celu jest używanie klas Optional (np. OptionalInt), ale tradycyjnie używało się wrapperów i w wielu miejscach to pozostało.
int[]a={13,7,14,3,12};
int[]b={13,7,3,9,-5};
Integerwynik1=pierwszaParzysta(a);
if(wynik1!=null){
System.out.println("pierwszy wynik: "+wynik1);
}else{
System.out.println("brak pierwszego wyniku");
}
Integerwynik2=pierwszaParzysta(b);
if(wynik2!=null){
System.out.println("drugi wynik: "+wynik2);
}else{
System.out.println("brak drugiego wyniku");
}
// 3) Kolekcje i bardziej ogólnie deklaracje typów generycznych.
// nie da rady: List<int> listaLiczb1 = new ArrayList<>();