2015-07-08 2 views
-2

У меня есть класс, он передает объекты, примитивные. может кто-нибудь, пожалуйста, объясните этотПроходит ли Java по ссылке

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 + '}'; 
} 

} 

главный класс

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); 
} 

} 

************* Выход *************** *

TestObj {имя = Джеймс, возраст = 25}

TestObj {имя = Я переоделся, возраст = 35}

:: Хай Тест

:: Хай Тест

------- 10

------- 10

+4

Java всегда передается по значению –

+1

Вы даже пытались выполнить Google перед отправкой своего вопроса? – BoDidely

+0

@ Apédémak фактически объекты не проходят по значению, а по его ссылкам передаются по значению. – user902383

ответ

1

Явы «проход -по-значение». всегда. но когда параметр является объектом, значение является ссылкой (адресом объекта), а не самим объектом

+0

Строка также является объектом, но почему ее значение не меняется? – LMK

+0

, потому что у String нет метода, который позволяет вам его изменить. это неизменно. но если вы получите «внутри» этой строки, используя отражение, вы сможете ее изменить – piotrek

Смежные вопросы