Я читал эту тему: Is Java "pass-by-reference" or "pass-by-value"?, и я попытался запустить пример из этого ответа: https://stackoverflow.com/a/73021/2838739. Фактически значение myDog было изменено вне этого метода. Тогда я попытался сделать то же самое с Integer. Я был удивлен, потому что его ценность не изменилась. Может ли кто-нибудь объяснить мне, почему?Передача ссылки на метод Integer на Java
Мой тестовый код:
package testtest;
class Dog {
String name;
public Dog(String name) {
this.name=name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class Main {
public static void main(String[] args) {
Dog myDog = new Dog("Rover");
System.out.println(myDog.getName());
foo(myDog);
System.out.println(myDog.getName());
Integer i = 5;
changeValue(i);
System.out.println(i);
}
public static void changeValue(Integer i) {
i = 50;
}
public static void foo(Dog someDog) {
someDog.setName("Max"); // AAA
someDog = new Dog("Fifi"); // BBB
someDog.setName("Rowlf"); // CCC
}
}
И выход был:
Rover
Макс
Спасибо заранее.
"Java всегда проходят по значению." - от самого проголосовавшего ответа. Однако он работает *** немного *** с объектами (поверх примитивных типов данных). Вот почему объекты работают почти как pass-by-reference. Решение объясняет это. –
Кто-то, вероятно, сможет описать это лучше, но в Java при назначении объекта Integer с примитивным значением 'int' он автоматически создает новый объект Integer, значение которого является примитивным' int '. Таким образом, в этом случае 'i' получает новую ссылку на объект внутри' changeValue() ', а' i' в 'main()' остается нетронутой. – jonhopkins
Какая часть связанного вопроса и ответов вы не понимаете? –