Java: Variables are Always Passed by Copy
I am learning Java. One of the important concepts to understand is whether arguments of a function is passing by copy or reference. Passing by copy means when a variable is passed to a function, a copy is made. Passing by reference means when a variable is passed to a function, the code in the function operates on the original variable.
In Java, variables are always passed by copy. Here are three scenarios:
Case 1: Passing Primitives
void incrementValue(int inFunction){
inFunction ++;
System.out.printIn("In function: " + inFunction);
}
int original = 10;
System.out.printIn("Original before: " + original); incrementValue(original);
System.out.printIn("Original after: " + original);
And the result is:
Original before: 10
In Function: 11
Original after: 10
The original value didn’t change.
Case 2: Passing primitives wrapped in objects
void incrementValue(int[] inFunction){
inFunction[0] ++;
System.out.printIn("In function: " + inFunction[0]);
}
int[] arOriginal = {10, 20, 30};
System.out.println("Original before: " + original[0]); incrementValue(original);
System.out.println("Original after: " + original[0]);
And the result is:
Original before: 10
In function: 11
Original after: 11
The original value did change! This is because complex object variables are references. A reference variable points to a location in memory. When a variable is passed to a function, a new reference is always created. Both references point to the original objects or values.
int[] origial = {10, 20, 30}
original[0] --> | 10 | <-- inFunction[0]
| 20 |
| 30 |
Both array elements point to the same memory location
Case 3: Passing Strings
void changeString(String inFunction){
inFunction = "New!";
System.out.println("In function: " + inFunction);
}
String original = "Original!";
System.out.println("Original before: " + original); changeString(original);
System.out.println("Original after: " + original);
The result is:
Original before: Original!
In function: New!
Original after: Original!
Remember, strings are immutable. A copy of the entire String is created when passed to a function.
Originally published at victorleungtw.com on March 9, 2015.