When a primitive type is passed to a method, it is done by use of call-by-value approach. In case of objects what is actually passed is an object reference. As a point of interest, an object reference is also passed by using call-by-value approach. However, since the value being passed refers to an object, the copy of that value will still refer to the same object that its corresponding argument does.
Example: The following example illustrates that Java uses call-by-value when passing primitive data types.
1 class Args1
2 { void swap(int a, int b)
3 { int t= a;
4 a = b; b = t;
5 }
6 public static void main(String args[])
7 { int x = 5, y = 7;
8 System.out.println("x = " + x + " y = " + y);
9 Args1 obj = new Args1(); obj.swap(x,y);
10 System.out.println("x = " + x + " y = " + y);
11 }
12 }
Output:
x = 5 y = 7
x = 5 y = 7
Example: The following example also illustrates that Java uses call-by-value when passing primitive data types.
1 class Args2
2 { static void swap(int a, int b)
3 { int t= a;
4 a = b; b = t;
5 }
6 public static void main(String args[])
7 { int x = 5, y = 7;
8 System.out.println("x = " + x + " y = " + y);
9 //Args2.swap(x,y);
10 swap(x,y);
11 System.out.println("x = " + x + " y = " + y);
12 }
13 }
Output:
x = 5 y = 7
x = 5 y = 7
Example: The following example illustrates that Java uses call-by-value even when passing reference types.
1 class Args3
2 { int a,b;
3 Args3(int x, int y)
4 { a = x;
5 b = y;
6 }
7 static void swap(Args3 ob1, Args3 ob2)
8 { Args3 t;
9 t = ob1;
10 ob1 = ob2;
11 ob2 = t;
12 }
13 public static void main(String args[])
14 { Args3 obj1 = new Args3(5,7);
15 Args3 obj2 = new Args3(4,6);
16 System.out.print("obj1.a = " + obj1.a + " obj1.b = " + obj1.b);
17 System.out.println(" obj2.a = " + obj2.a + " obj2.b = " + obj2.b);
18 swap(obj1,obj2);
19 System.out.print("obj1.a = " + obj1.a + " obj1.b = " + obj1.b);
20 System.out.println(" obj2.a = " + obj2.a + " obj2.b = " + obj2.b);
21 }
22 }
Output:
obj1.a = 5 obj1.b = 7 obj2.a = 4 obj2.b = 6
obj1.a = 5 obj1.b = 7 obj2.a = 4 obj2.b = 6
Example: The following example illustrates that although Java uses call-by-value when passing reference types but we can still modify the object referred to by the argument inside the called method, as what is actually passed is a reference.
1 class Args4
2 { int a,b;
3 Args4(int x, int y)
4 { a = x;
5 b = y;
6 }
7 static void swap(Args4 ob1, Args4 ob2)
8 { int x,y;
9 x = ob1.a; y = ob1.b; ob1.a = ob2.a; ob1.b = ob2.b;
10 ob2.a = x; ob2.b = y;
11 }
12 public static void main(String args[])
13 { Args4 obj1 = new Args4(5,7);
14 Args4 obj2 = new Args4(4,6);
15 System.out.print("obj1.a = " + obj1.a + " obj1.b = " + obj1.b);
16 System.out.println(" obj2.a = " + obj2.a + " obj2.b = " + obj2.b);
17 swap(obj1,obj2);
18 System.out.print("obj1.a = " + obj1.a + " obj1.b = " + obj1.b);
19 System.out.println(" obj2.a = " + obj2.a + " obj2.b = " + obj2.b);
20 }
21 }
Output:
obj1.a = 5 obj1.b = 7 obj2.a = 4 obj2.b = 6
obj1.a = 4 obj1.b = 6 obj2.a = 5 obj2.b = 7
Example: The following example illustrates that Java uses call-by-value when passing primitive data types.
1 class Args1
2 { void swap(int a, int b)
3 { int t= a;
4 a = b; b = t;
5 }
6 public static void main(String args[])
7 { int x = 5, y = 7;
8 System.out.println("x = " + x + " y = " + y);
9 Args1 obj = new Args1(); obj.swap(x,y);
10 System.out.println("x = " + x + " y = " + y);
11 }
12 }
Output:
x = 5 y = 7
x = 5 y = 7
Example: The following example also illustrates that Java uses call-by-value when passing primitive data types.
1 class Args2
2 { static void swap(int a, int b)
3 { int t= a;
4 a = b; b = t;
5 }
6 public static void main(String args[])
7 { int x = 5, y = 7;
8 System.out.println("x = " + x + " y = " + y);
9 //Args2.swap(x,y);
10 swap(x,y);
11 System.out.println("x = " + x + " y = " + y);
12 }
13 }
Output:
x = 5 y = 7
x = 5 y = 7
Example: The following example illustrates that Java uses call-by-value even when passing reference types.
1 class Args3
2 { int a,b;
3 Args3(int x, int y)
4 { a = x;
5 b = y;
6 }
7 static void swap(Args3 ob1, Args3 ob2)
8 { Args3 t;
9 t = ob1;
10 ob1 = ob2;
11 ob2 = t;
12 }
13 public static void main(String args[])
14 { Args3 obj1 = new Args3(5,7);
15 Args3 obj2 = new Args3(4,6);
16 System.out.print("obj1.a = " + obj1.a + " obj1.b = " + obj1.b);
17 System.out.println(" obj2.a = " + obj2.a + " obj2.b = " + obj2.b);
18 swap(obj1,obj2);
19 System.out.print("obj1.a = " + obj1.a + " obj1.b = " + obj1.b);
20 System.out.println(" obj2.a = " + obj2.a + " obj2.b = " + obj2.b);
21 }
22 }
Output:
obj1.a = 5 obj1.b = 7 obj2.a = 4 obj2.b = 6
obj1.a = 5 obj1.b = 7 obj2.a = 4 obj2.b = 6
Example: The following example illustrates that although Java uses call-by-value when passing reference types but we can still modify the object referred to by the argument inside the called method, as what is actually passed is a reference.
1 class Args4
2 { int a,b;
3 Args4(int x, int y)
4 { a = x;
5 b = y;
6 }
7 static void swap(Args4 ob1, Args4 ob2)
8 { int x,y;
9 x = ob1.a; y = ob1.b; ob1.a = ob2.a; ob1.b = ob2.b;
10 ob2.a = x; ob2.b = y;
11 }
12 public static void main(String args[])
13 { Args4 obj1 = new Args4(5,7);
14 Args4 obj2 = new Args4(4,6);
15 System.out.print("obj1.a = " + obj1.a + " obj1.b = " + obj1.b);
16 System.out.println(" obj2.a = " + obj2.a + " obj2.b = " + obj2.b);
17 swap(obj1,obj2);
18 System.out.print("obj1.a = " + obj1.a + " obj1.b = " + obj1.b);
19 System.out.println(" obj2.a = " + obj2.a + " obj2.b = " + obj2.b);
20 }
21 }
Output:
obj1.a = 5 obj1.b = 7 obj2.a = 4 obj2.b = 6
obj1.a = 4 obj1.b = 6 obj2.a = 5 obj2.b = 7
No comments:
Post a Comment