вопрос новичка Java - PullRequest
       25

вопрос новичка Java

1 голос
/ 02 декабря 2009

если у меня есть что-то вроде этого

Map<String, Foo> foos;
...

Foo f = foos.get("key1");
foos.removeAll();

Могу ли я еще сделать String s = f.getSomeProperty();

Ответы [ 5 ]

11 голосов
/ 02 декабря 2009

foos содержит только ссылки на объекты, а не полные объекты. Если вы получаете что-то из foos, вы получаете ссылку на этот объект, и вы можете изменить его. Если вы удалите все элементы из foos, то он больше не будет содержать ссылки, и эти объекты можно будет собирать мусором, только если нет других ссылок на эти объекты.

6 голосов
/ 02 декабря 2009

Да, вы есть. Вы только что очистили карту, но локальная переменная f все еще содержит действительную ссылку на Foo, и вы все еще можете использовать ее.

1 голос
/ 02 декабря 2009

Да, f это объект Foo, и если у Foo есть какое-либо свойство, которое является строкой, используйте его
Код:

Map<String, Integer> mp = new HashMap<String, Integer>();
mp.put("key1", 48);
mp.put("key2", 50);
mp.put("key3", 52);
mp.put("key4", 54);
mp.put("key5", 56);
mp.put("key6", 58);
Integer mytemp = mp.get("key1");
mp.clear();
System.out.println(mytemp);

Из:

48

который видит mytemp - это ваш f, который является полным объектом, а не только указателем

1 голос
/ 02 декабря 2009

Простой ответ - да. f содержит ссылку на объект, который foos.Get("key1") вернул (при условии, что он не равен нулю). Когда вы удаляете все из foos, вы просто удаляете ссылки из объекта foos - вы на самом деле не уничтожаете данные, которые foos раньше содержал.

1 голос
/ 02 декабря 2009

Обратите внимание, что String (обратите внимание на заглавную S) - это имя класса Java, который представляет строки символов. Но да, да.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...