При передаче объектов через параметр он проходит по ссылке. Когда я вызываю метод add из списка, он сохраняет ссылку на объект в списке или новый экземпляр объекта в списке? Если он хранится по ссылке, то могу ли я иметь объект с двумя списками одновременно?Объекты, хранящиеся в списке по ссылке или по значению
-2
A
ответ
0
Все в Java передается по значению. Мы имеем:
Примитивы: такие, как
int
,boolean
,double
, ... и т.д.. Они могут легко восприниматься как принятые по значению.объектов: Ссылки на объекты передаются по значению
Пример для объектов:
public static void main(String[] args) {
String first = "a";
tryToChangeReference(a);
// The value of 'first' is still "a"
// In fact, if the value of 'first' was changed by
// the tryToChangeReference method, then you
// know that the language passes by reference
System.out.println(a); //outputs: a
}
private static void tryToChangeReference(String a) {
a = "b";
}
Таким образом, отвечая на ваш вопрос ... Да, вы можете иметь объект существующий с двумя разные списки. Например:
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void getAge() {
return age;
}
public void setAge(int newAge) {
this.age = newAge;
}
@Override
public String toString() {
return name + ":" + age;
}
}
// a main somewhere else
public static void main(String[] args) {
List<String> firstList = new ArrayList<String>();
List<String> secondList = new ArrayList<String>();
Person tom = new Person("Tom", 20);
firstList.add(tom);
secondList.add(tom);
System.out.println(firstList.get(0)); //output: Tom:20
System.out.println(secondList.get(0)); //output: Tom:20
//we modify the Person object in firstList
firstList.get(0).setAge(33);
System.out.println(firstList.get(0)); //output: Tom:33
System.out.println(secondList.get(0)); //output: Tom:33
//we modify the Person object 'tom'
tom.setAge(99);
System.out.println(firstList.get(0)); //output: Tom:99
System.out.println(secondList.get(0)); //output: Tom:99
//we now change the reference value of the Person object 'tom'
tom = new Person("Sam", 44);
System.out.println(firstList.get(0)); //output: Tom:99
System.out.println(secondList.get(0)); //output: Tom:99
//how about this
secondList.set(0, new Person("Mat", 50);
System.out.println(firstList.get(0)); //output: Tom:99
System.out.println(secondList.get(0)); //output: Mat:50
}
Смежные вопросы
- 1. Java - Объекты в списке, хранящиеся по значению или ссылке?
- 2. с # по ссылке или по значению
- 3. Объекты ColdFusion передаются по ссылке или по значению?
- 4. Поддерживает ли javascript объекты по ссылке или по значению?
- 5. Объекты Objective-C проходят по значению или передаются по ссылке?
- 6. Передача по ссылке или по значению по значению Java
- 7. C++ передается по ссылке или по значению?
- 8. Передача контейнеров по значению или по ссылке
- 9. Возвращение по ссылке или по значению. C++
- 10. Передайте по ссылке ИЛИ по значению
- 11. RMI: Передайте по значению или по ссылке?
- 12. Вызвать по ссылке или позвонить по значению
- 13. Массивы передаются по ссылке или по значению
- 14. Ruby - передача по значению или по ссылке
- 15. Передача функции по ссылке или по значению?
- 16. Являются ли объекты в PHP переданными по значению или ссылке?
- 17. Передает ли C++ объекты по значению или ссылке?
- 18. Возвращающиеся объекты по ссылке
- 19. Аргументы переданы методам по ссылке или значению?
- 20. Python - по значению vs по ссылке
- 21. C# Многопоточность Передать по значению или ссылке?
- 22. Пройдите по значению или ссылке. Простое представление
- 23. NSArray/NSMutableArray: передано по ссылке или по значению?
- 24. Передать перечисления по значению или ссылке?
- 25. ActionScript. Передача вектора по ссылке или значению?
- 26. Передача v4sf по значению или ссылке
- 27. Отображаются ли карты по значению или по ссылке в Go?
- 28. Передача аргументов по значению или по ссылке в объекте C
- 29. Массивы в Python назначаются по значению или по ссылке?
- 30. Обработка данных по ссылке или по значению в python
В Java все передается копией. Когда вы передаете ссылку на объект в качестве аргумента в метод, такая ссылка копируется, и теперь две ссылки, аргумент на сайте вызова и фактический параметр в методе указывают на один и тот же объект. Это может смутить вас и заставить вас поверить, что оно передается по ссылке. –