Leere Objektreferenz mit != null vergleichen

Status
Nicht offen für weitere Antworten.

nrg

Top Contributor
Hallo Zusammen.

ich sitz grad an einer Übungsaufgabe und weiß zu folgendem Problem einfach nicht mehr weiter:

Java:
class VorratskammerTester2
{
  public static void main ( String[] args )
  {
    Marmelade stachelbeer = new Marmelade("Stachelbeer", "04.07.01", 12);
    Marmelade erdbeer = new Marmelade("Erdbeer", "31.09.03", 8);

    Vorratskammer vorrat = new Vorratskammer(stachelbeer, erdbeer);
    vorrat.ausgeben();
Java:
class Vorratskammer
{
  // Instanzvariablen
  private Marmelade  glas1 ;
  private Marmelade  glas2 ;
  private Marmelade  glas3 ;

  // Konstruktor der in diesem Fall aufgerufen wird
  }
  Vorratskammer(Marmelade glas1, Marmelade glas2)
  {
	  this.glas1 = glas1;
	  this.glas2 = glas2;
	  this.glas3 = null;  // eindeutige Nullzuweißung in die Referenzvariable glas3
	  glasAusgewaehlt = null;
  }
  // Methoden
  public void ausgeben()
  {
	System.out.println("Die Vorratskammer enthält:");
	if (glas1 != null)
		System.out.print("1: "); glas1.ausgeben();
	if (glas2 != null)
		System.out.print("2: "); glas2.ausgeben();
	if (glas3 != null) //Obwohl im Debugger zu sehen ist, dass diese Referenzvariable null ist, springt er rein
		System.out.print("3: "); glas3.ausgeben(); //genau hier knallts dann.... ist auch klar, weil die Referenz glas3 null ist. da soll er auch eigentlich garnet hineingehen :'(
  }
Java:
class Marmelade
{
  // Instanzvariablen
  private String inhalt;
  private String datum ;
  private int menge; 


  // Konstruktor
  Marmelade(String inhalt, String datum, int menge)
  {
    this.inhalt = inhalt;
    this.datum  = datum;
    this.menge  = menge;
  }

  // Methoden
  public void ausgeben()
  {
    System.out.println(inhalt + "   " +  datum + "   " +  menge + " Unzen.");
  }

Warum lässt sich die Objektreferenz nicht auf == bzw != null abprüfen, ob sie leer ist?

Ein Tipp hier wäre super 🙂

danke und grüße
andi
 
Java:
{
und
Java:
}
sind dein Freund.

Wenn du diese hinter if() weglässt, fällt nur das nächste Statement in den "If-Zweig", in deinem Falle ist dies lediglich das System.out.println(...)
 
versteh ich jetzt nicht ganz... hinter jedem if steht doch auch nur genau ein statement...


Java:
	if (glas1 != null)
		System.out.print("1: "); glas1.ausgeben();
	if (glas2 != null)
		System.out.print("2: "); glas2.ausgeben();
	if (glas3 != null)
		System.out.print("3: "); glas3.ausgeben();

EDIT:
in deinem Falle ist dies lediglich das System.out.println(...)

mehr soll ja auch nicht rein 😉
 
Nein. Dort stehen jeweils 2 Statements

1: System.out.print(...);
2: glasX.ausgeben();

auch wenn beides in einer Zeile steht, so sind es 2 Statements.

Richtig wäre also:

Java:
if(glasX != null) {
  System.out.print(...);
  glasX.ausgeben();
}

Wegen deinem Edit:

Genau zu sehen ist es so, dein Code entspricht folgendem:

Java:
if (glas1 != null) {
  System.out.print("1: ");
}
glas1.ausgeben();
if (glas2 != null) {
  System.out.print("2: ");
}
glas2.ausgeben();
if (glas3 != null) {
  System.out.print("3: ");
}
glas3.ausgeben();
 
ahhhh ok 🙂. danke

edit: werde mir in Zukunft angewöhnen alles zu klammern. War mit den Klammern bis jetzt noch etwas geizig 😛
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben