The array reference here is passed by value to the methods below. This is similar to what we usually see in case of Javascript.
Arrays
class createArr { int[] bag; public createArr(int[] arr) { this.bag = arr; this.addOne(arr); } public void addOne(int[] arr) { arr[0] = 1; } public void print() { System.out.println(this.bag[0]); } } public class HelloWorld { public static void main(String[] args) { int[] demo = { 2 }; createArr cr = new createArr(demo); cr.print(); // 1 System.out.println(demo[0]); // 1 } }
Objects
The following program to print kth last element in a linkedlist, demonstrates that value of method parameters always take values only. In the case of objects, the value (a copy) of the object reference is passed.
class Node { public String value; public Node next; public Node(String value) { this.value = value; } } public class LL { public static void main(String[] args) { Node a = new Node("First"); Node b = new Node("Second"); Node c = new Node("Third"); Node d = new Node("Fourth"); Node e = new Node("Fifth"); a.next = b; b.next = c; c.next = d; d.next = e; kthToLast(2, a); } public static void kthToLast(int k, Node head) { Node p1 = getkth(k, head); System.out.println(head.next.value); // Second /* Here head value didn't change as mathod parameters only take values and so here the value of object reference was only passed */ Node p2 = head; while (p1.next != null) { p1 = p1.next; p2 = p2.next; } System.out.println(p2.value); // Fourth } public static Node getkth(int k, Node head) { // Node curr = head; for (int i = 1; i < k; i++) { //curr = curr.next; head = head.next; } //return curr; return head; } }