# Leere Objektreferenz mit != null vergleichen



## nrg (8. Dez 2009)

Hallo Zusammen.

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


```
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();
```


```
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 :'(
  }
```


```
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


----------



## mvitz (8. Dez 2009)

```
{
```
 und 
	
	
	
	





```
}
```
 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(...)


----------



## nrg (8. Dez 2009)

versteh ich jetzt nicht ganz... hinter jedem if steht doch auch nur genau ein statement...




nrg hat gesagt.:


> ```
> if (glas1 != null)
> System.out.print("1: "); glas1.ausgeben();
> if (glas2 != null)
> ...



EDIT:


mvitz hat gesagt.:


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



mehr soll ja auch nicht rein


----------



## mvitz (8. Dez 2009)

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:


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

Wegen deinem Edit:

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


```
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();
```


----------



## nrg (8. Dez 2009)

ahhhh ok . danke

edit: werde mir in Zukunft angewöhnen alles zu klammern. War mit den Klammern bis jetzt noch etwas geizig


----------

