ArrayList가 있고 여기에 개체를 추가하고 나중에이 개체를 수정 한 경우이 변경 사항이 ArrayList에 반영됩니까? 또는 ArrayList에 객체를 추가하면 Java가 복사본을 만들어 ArrayList에 추가합니까?
이 개체에 대한 참조를 null로 변경하면 어떻게됩니까? 그것은 ArrayList의 객체도 이제 null을 의미합니까?
답변
이 변경 사항이 ArrayList에 반영됩니까?
예, 목록에있는 개체에 대한 참조 를 추가했기 때문 입니다. 추가 한 참조는 여전히 수정 한 동일한 객체를 가리 킵니다.
또는 ArrayList에 객체를 추가하면 Java가 복사본을 만들어 ArrayList에 추가합니까?
아니요, 개체를 복사하지 않습니다. (객체에 대한 참조를 복사합니다.)
이 개체에 대한 참조를 null로 변경하면 어떻게됩니까? 그것은 ArrayList의 객체도 이제 null을 의미합니까?
아니요, 목록에 추가 될 때 원본 참조의 내용이 복사 되었기 때문 입니다. ( 객체가 아니라 복사 되는 참조 임을 명심하십시오 .)
데모:
StringBuffer sb = new StringBuffer("foo");
List<StringBuffer> list = new ArrayList<StringBuffer>();
list.add(sb);
System.out.println(list); // prints [foo]
sb.append("bar");
System.out.println(list); // prints [foobar]
sb = null;
System.out.println(list); // still prints [foobar]
답변
개체에 대한 모든 변경 사항이 목록에 반영됩니다.
그러나 변경 불가능한 문자열과 같은 객체를 다룰 때 “변경 작업”시 새 객체가 생성됩니다. 실제로 이전 개체는 다른 곳에서 새 개체를 얻는 동안 여전히 목록에 있습니다.
답변
여러분 모두 감사합니다. 나는 당신의 게시물을 읽음으로써 다시 그것을 알아 냈습니다. 오래전에 소화해 봤지만 최근에 어떻게 작동하는지 잊어 버렸기 때문에 혼란 스러울 것입니다. 그래서 저는 저를 위해 문제를 해결하는 열쇠를 공유하고 싶습니다. (Java의 비 원시 객체 (프리미티브는 int, boolean 등)는 기술적으로 포인터입니다). u는 추가하면 O를 개체를 목록, 목록과에 오 같은 일을 점 유 수정할 때 너무 O를 목록의 항목이 변경. 이것은 그들이 같은 것을 가리키고 o가 =에 의해 다른 것을 가리킬 때 끊어지는 한입니다 .
o = null; //o points to nothing and changes in o from now on doesn't effect the list's item
또는
Object a = new Object();
o = a; //o and the list's item don't point to same thing so changes in o doesn't effect the list's item (but it effects a)
누군가에게 도움이되기를 바랍니다
답변
ArrayList가 값으로 Map 내부에있는 또 다른 데모를 추가하려고합니다. ArrayList는 Map에 추가 한 후 수정되며 Map은 변경 사항을 반영합니다.
지도에는 어머니의 이름을 키로, 자식을 값으로하는 요소가 하나 있습니다.
String key = "adeleMom";
Map<String, ArrayList<String>> myMap = new HashMap<String, ArrayList<String>>();
ArrayList<String> firstList = new ArrayList<String>();
firstList.add("adele");
myMap.put(key, firstList);
firstList = null;
ArrayList secondList = myMap.get(key);
System.out.println(secondList); // prints [adele]
secondList.add("bonnie");
System.out.println("Added bonnie");
ArrayList thirdList = myMap.get(key);
System.out.println(thirdList); // prints [adele, bonnie]