-2

I have a class , it passes objects,primitive . can anyone please explain this

public class TestObj {
String name;
int age;

public TestObj(String name, int age) {
    this.name = name;
    this.age = age;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public int getAge() {
    return age;
}

public void setAge(int age) {
    this.age = age;
}

@Override
public String toString() {
    return "TestObj{" + "name=" + name + ", age=" + age + '}';
}

}

main class

public class Test {

public static void main(String[] args) {
    Test t = new Test();

    TestObj obj = new TestObj("James", 25);
    System.out.println("************* Output ****************");
    System.out.println(obj);
    t.setName(obj);
    t.setAge(obj);
    System.out.println(obj);

    String a = "Hai Test";
    System.out.println(">> :: " + a);
    t.setString(a);
    System.out.println(":: " + a);

    int x = 10;
    System.out.println("------- " + x);
    t.setInt(x);
    System.out.println("------- " + x);

}

public void setInt(int y) {
    y = 25;
}

public void setString(String x) {
    x = "Did i changed my Data";

}

public void setName(TestObj obj1) {
    obj1.setName("I got Changed");
}

public void setAge(TestObj obj1) {
    obj1.setAge(35);
}

}  

************* Output ****************

TestObj{name=James, age=25}

TestObj{name=I got Changed, age=35}

:: Hai Test

:: Hai Test

------- 10

------- 10

LMK
  • 2,882
  • 5
  • 28
  • 52

1 Answers1

1

java is 'pass-by-value'. always. but when a parameter is an object, the value is a reference (an address of an object), not the object itself

piotrek
  • 13,982
  • 13
  • 79
  • 165
  • String is also Object know , then why its value is not changing ? – LMK Jul 09 '15 at 07:25
  • because String has no method that allows you to change it. it's immutable. but if you get 'inside' that string using reflection you will be able to change it – piotrek Jul 09 '15 at 07:28