// ValueVsReference.java

public class ValueVsReference {
   public static void main(String[] args)
   {
      short[] a = new short[] { 0, 2, 4, 6, 8 };

      System.out.println("The values originally stored in the array are:");
      for ( int i = 0; i < a.length; i++ )
         System.out.print("   " + a[i]);
      System.out.println();
      System.out.println("Let's see how the values change.");
   
      modifyPrimitive(a[0]);

      for ( int i = 0; i < a.length; i++ )
         System.out.print("   " + a[i]);
      System.out.println("           Method tried to modify primitive element.");
   
      modifyArray(a);

      for ( int i = 0; i < a.length; i++ )
         System.out.print("   " + a[i]);
      System.out.println("      Method modified array.");
   
      modifyArrayReference(a);

      for ( int i = 0; i < a.length; i++ )
         System.out.print("   " + a[i]);
      System.out.println("      Method modified its own reference to array.");
   }  // method main

   public static void modifyPrimitive(short p)
   {
      p = 20;
   }  // method modifyPrimitive

   public static void modifyArray(short[] b)
   {
      for ( int j = 0; j < b.length; j++ )
         b[j] = (short) (j*(-3));
   }  // method modifyArray

   public static void modifyArrayReference(short[] b)
   {
      b = new short[5];
      for ( int j = 0; j < b.length; j++ )
         b[j] = (short) (j*3);
   }  // method modifyArrayReference
}  // class ValueVsReference