I am reading about Pass by Value and Pass by reference in java, I got many articles,some of them saying Java is following only 'Pass by value " and some of them saying some difference between primitive and object. so I wrote following sample code. and putting output also. Please comment and share what is exactly the answer is.
I checked for Int, String , StringBuffer and Employee class, now Its working as pass by reference for Employee class only.
package test;
class Emp {
public String name="";
public int age=0;
public Emp(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String toString() {
return "Name: "+ this.name + "....Age: "+ this.age;
}
}
public class Class1 {
public Class1() {
super();
}
public void doChange(int i) {
i = i +10;
System.out.println("Value of Integer in Method:>"+ i);
}
public void doChange(Emp i) {
i.age=29;
i.name="rishu";
System.out.println("Value of Employee In Method "+i.toString());
}
public void doChange(String i) {
i = i + " Hello";
System.out.println("value of i->"+ i);
}
public static void main(String[] args) {
int i =10;
String str="XXX";
Class1 c= new Class1();
StringBuffer sb= new StringBuffer();
Emp e= new Emp("abhi",28);
sb.append("ABC ");
System.out.println("");
System.out.println("Value of Integer before Method:->"+ i);
c.doChange(i);
System.out.println("Value of Integer after Method:->"+ i);
System.out.println("");
System.out.println("Value of String before Method:->"+ str);
c.doChange(str);
System.out.println("Value of Integer after Method:->"+ str);
System.out.println("");
System.out.println("Value of StringBuffer before Method:->"+ sb);
c.doChange(sb.toString());
System.out.println("Value of StringBuffer after Method:->"+ sb);
System.out.println("");
System.out.println("Value of Employee before Method:->"+ e.toString());
c.doChange(e);
System.out.println("Value of Employee after Method:->"+ e.toString());
}
}
Output:
Value of Integer before Method:->10
Value of Integer in Method:>20
Value of Integer after Method:->10
Value of String before Method:->XXX
value of i->XXX Hello
Value of Integer after Method:->XXX
Value of StringBuffer before Method:->ABC
value of i->ABC Hello
Value of StringBuffer after Method:->ABC
Value of Employee before Method:->Name: abhi....Age: 28
Value of Employee In Method Name: rishu....Age: 29
Value of Employee after Method:->Name: rishu....Age: 29