Hi guys this
is a very good topic in java people generally confused on it. Here I am trying
to explain how Java is always use pass-by-value.
The Java
Spec says that everything in Java is pass-by-value. There is no such thing as
"pass-by-reference" in Java.
The key
point to understand is when we are passing an object in a method than we are
actually passing the address of the object. Actually it’s a copy of bit of that
object.
When we pass
an Object into a method we are passing the Object reference and not the Object
itself.
Java
example –
In below example we are passing
the primitive variable number than its just passing a copy of bit representation
of number that’s why the actual value unchanged in main method.
Code snippet-
/**
* @author Manoj
*/
public class ReferenceTest {
public static void main(String[] args) {
int number =1;
ReferenceTest
referenceTest = new ReferenceTest();
System.out.println(number); //prints 1
referenceTest.modify(number);
System.out.println(number); //prints 1
}
private void modify (int number) {
number = number+1;
System.out.println(number); // print 2
}
}
-------------------------------------------------------------------------------------
Similarly in below code we are
using a static variable but again the value is unchanged in main method because
it’s just passing a copy.
Code snippet-
/**
* @author Manoj
*/
public class ReferenceTest {
static int number = 11;
public static void main(String[] args) {
ReferenceTest
referenceTest = new ReferenceTest();
System.out.println(number); //prints 11
referenceTest.modify(number);
System.out.println(number); //prints 11
}
private void modify (int number) {
number = number+10;
System.out.println(number); // print 21
}
}
---------------------------------------------------------------------------------
In below code we are taking
Reference object to elaborate the concept of copy of value.
Code snippet-
/**
* @author Manoj
*/
public class ReferenceTest {
Reference reference = new Reference();
public static void main(String[] args) {
ReferenceTest
referenceTest = new ReferenceTest();
System.out.println(referenceTest.reference.refNumber); //prints 28
referenceTest.modify(referenceTest.reference);
System.out.println(referenceTest.reference.refNumber); //prints 99
}
private void modify (Reference reference) {
reference.refNumber = 99; // here we are
updating the actual value
System.out.println(reference.refNumber); // print 99
reference = new Reference();
reference.refNumber = 420;
System.out.println(reference.refNumber); //420
}
}
class Reference {
int refNumber = 28;
}
very usefull in full details thanks
ReplyDelete