| Java FAQ | ||
| JSP FAQ | ||
| Servlet FAQ | ||
XyzWs Java FAQ:
Are parameters passed by reference or passed by value in method invocation?
Printer-friendly version |
Mail this to a friend
|
Advertisement
|
Are parameters passed by reference or passed by value in method invocation?In programming, there are two ways to pass arguments to a method, pass-by-value and pass-by-reference:
Technically, all parameters in Java are pass-by-value. All primitives are pass-by-value, period. When a primitive value is passed into a method, a copy of the primitive is made. The copy is what is actually manipulated in the method. So, the value of the copy can be changed within the method, but the original value remains unchanged. For example:
public class TestPassPrimitive {
static void doSomething(int m) {
m = m + 2;
System.out.println("The new value is " + m + ".");
}
public static void main(String[] args) {
int m = 5;
System.out.println("Before doSomething, m is " + m + ".");
doSomething(m);
System.out.println("After doSomething, m is " + m + ".");
}
}
The output result is Before doSomething, m is 5. The new value is 7. After doSomething, m is 5. Objects, however, work a bit differently. When you pass a Java object or array as a parameter, an object reference or array reference is passed into a method. The method can manipulate the attributes of the object that is referenced by the reference (formal parameter). This reference is passed-by-value. What does this mean exactly?
The subtleties of passing parameters will become clearer as you write more and more methods. Experimentation is the best form of learning. For example:
class TestReferenceParameter{
public static void main (String args[]) {
String s1 = "one";
String s2 = doSomething(s1);
System.out.println(s1 + " " + s2);
}
static String doSomething(String s1) {
s1 = s1 + " two";
System.out.println(s1 + " ");
return "three";
}
}
The output result is one two one three |