Java Reference
In-Depth Information
Listing 5.5 gives another program that demonstrates the effect of passing by value. The pro-
gram creates a method for swapping two variables. The
swap
method is invoked by passing
two arguments. Interestingly, the values of the arguments are not changed after the method is
invoked.
L
ISTING
5.5
TestPassByValue.java
1
public class
TestPassByValue {
2
/** Main method */
3
public static void
main(String[] args) {
4
// Declare and initialize variables
5
int
num1 =
1
;
6
int
num2 =
2
;
7
8 System.out.println(
"Before invoking the swap method, num1 is "
+
9 num1 +
" and num2 is "
+ num2);
10
11
// Invoke the swap method to attempt to swap two variables
12
13
14 System.out.println(
"After invoking the swap method, num1 is "
+
15 num1 +
" and num2 is "
+ num2);
16 }
17
18
/** Swap two variables */
19 {
20 System.out.println(
"\tInside the swap method"
);
21 System.out.println(
"\t\tBefore swapping, n1 is "
+ n1
22 +
" and n2 is "
+ n2);
23
24
// Swap n1 with n2
25
int
temp = n1;
26 n1 = n2;
27 n2 = temp;
28
29 System.out.println(
"\t\tAfter swapping, n1 is "
+ n1
30 +
" and n2 is "
+ n2);
31 }
32 }
swap(num1, num2);
false swap
public static void
swap(
int
n1,
int
n2)
Before invoking the swap method, num1 is 1 and num2 is 2
Inside the swap method
Before swapping, n1 is 1 and n2 is 2
After swapping, n1 is 2 and n2 is 1
After invoking the swap method, num1 is 1 and num2 is 2
Before the
swap
method is invoked (line 12),
num1
is
1
and
num2
is
2
. After the
swap
method
is invoked,
num1
is still
1
and
num2
is still
2
. Their values have not been swapped. As shown
in Figure 5.4, the values of the arguments
num1
and
num2
are passed to
n1
and
n2
, but
n1
and
n2
have their own memory locations independent of
num1
and
num2
. Therefore, changes in
n1
and
n2
do not affect the contents of
num1
and
num2
.
Another twist is to change the parameter name
n1
in
swap
to
num1
. What effect does this
have? No change occurs, because it makes no difference whether the parameter and the argu-
ment have the same name. The parameter is a variable in the method with its own memory
space. The variable is allocated when the method is invoked, and it disappears when the
method is returned to its caller.