// Unterschied "flache" Kopie vs. "tiefe" Kopie

class ReferenzUndKopie
{
  public static void main (String[] args)
  {
      Integer[] beer;
      Integer[] lager;

      beer = new Integer[5];

      beer[3] = new Integer(3);


      // Der Wert der Referenzvariablen beer wird
      // in die Referenzvariable lager kopiert.
      lager = beer;

      if (lager[3].intValue() == 3)
         System.out.println(
            "lager[3] hat jetzt den Wert 3.");


      beer[3] = new Integer(256);

      if (lager[3].intValue() == 256)
         System.out.println(
            "Die Referenz beer wurde kopiert" +
            " -- beide Referenzen beer und lager" +
            " zeigen auf dasselbe Objekt.");



      // Ein Feld fuer lager erzeugen ...
      lager = new Integer[5];

      // ... und die Feldelemente
      // von beer nach lager kopieren.
      for (int i = 0; i < lager.length; i++)
         lager[i] = beer[i];


      beer[3] = new Integer(1234);

      if (lager[3].intValue() != 1234)
         System.out.println(
            "Eine Kopie des Feldes, auf das beer" +
            " verweist, wurde erzeugt" +
            " -- die Referenzen beer und lager" +
            " zeigen auf unterschiedliche Objekte.");
  }

}
