class TestMethodInvocation{

    public static void main(String[] args){
    
        int i = 50;
        System.out.println("Original value of i: \t\t\t -> " + i);
        
        changeValue(i);
        System.out.println("Value of i after method invocation: \t -> " + i);    
        System.out.println();
        
        int[] array = { 10, 10, 10 };
        System.out.println("Original array values: ");
        printArray(array);
        changeObjectRef(array);
        System.out.println("After Object reference changed in method: ");
        printArray(array);
        changeActualObject(array);        
        System.out.println("After object changed in method: ");
        printArray(array);
        
                        
    }
    
    static void changeValue(int i) {
        i = i * 3;
        System.out.println("Value of i in the method: \t\t -> " + i);
    }
    
    static void changeObjectRef(int[] arr) {
        // set the original array reference to
        // a new array

        int[] array1 = { 20, 20, 20 };               
        arr = array1;                    
        System.out.println("Array in the method: ");
        printArray(arr);
    }
    
    static void changeActualObject(int[] arr) {
        // change an element in the array
        arr[1] = 20;        
    }
    
    static void printArray(int[] arr) {
        int i;
    
        for( i=0; i<3 ; i++) {
            System.out.print( arr[i] + ", ");
        }
        System.out.println();    
    }
}