OOP Wrapper Klassen - Stack-Aufgabe

Lee01

Mitglied
Ich habe zu folgendem Code eine Frage, die mir hier hoffentlich jemand beantworten kann:

Java:
public class EasyStack {

	Object stack [] = new EasyStack [4];
	private int top = -1;
	
	public void push (Object o)
	{
		top++;
		stack [top]= o;
	
	}
	
	public Object pop ()
	{
		top--;
		return stack [top + 1];
	}
}

Testklasse:

public class EasyStackTest {

	
	public static void main(String[] args)
	{
		
	EasyStack arr = new EasyStack();
	{
		boolean booleanWert = false;
		char	charWert	= 'c';
		int 	intWert		= 1234;
		double	doubleWert	= 1234.1234;
		
		arr.push (new Boolean (booleanWert));
		arr.push (new Character (charWert));
		arr.push (Integer.valueOf (intWert));
		arr.push(new Double (doubleWert));
		
		System.out.println ("Double: " + arr.pop ());
		System.out.println ("Integer: "+ arr.pop ());
		System.out.println ("Character: " + arr.pop());
		System.out.println ("Boolean: "+ arr.pop());
		
	}

	}

}

Es betrifft die Zeilen 36-39:
Was ich nicht verstehe ist, wieso es möglich ist mit dem new-Operator praktisch in der Argumentenliste der Methode neue Instanzen von verschiedenen Wrapper-Klassen anzulegen (ich hoffe, ich hab das einigermassen richtig formuliert, wenn nicht bitte verbessern). Was passiert an dieser Stelle eigentlich?? In der Augabe steht, hier wird der Stack "befüllt" - aber das will mir nicht so recht einleuchten.

Kennt sich jemand aus?

Danke 🙂
LG Thomas
 
Du könntest genauso gut auch schreiben:
Java:
Integer i = new Integer(intWert);
arr.push(i);

Dadurch, dass du das neue Objekt erst im Konstruktor erzeugst, sparst du dir den Bezeichner/die Referenz dafür, hast sozusagen dann ein "anonymes Objekt" (kann man das so nennen?). Das kann wie in diesem Fall praktisch sein, wenn es nicht notwendig ist, das Objekt über einen Bezeichner anzusprechen.
 
Die Methode
Code:
push
erwartet als Übergabe etwas vom Typ Object.
Du kannst also nicht (ohne weiteres) int, boolean, char übergeben, weil das primitive Datentypen sind (also keine Objekte).
Um das auszugleichen gibt es für jeden primitiven Datentypen eine Wrapperklasse, damit du wie Möglichkeit hast das zu machen was du in deinem Code machst 😉

(Autoboxing mal außen vor gelassen...)
 

Zurück
Oben