2012-06-13 6 views
0

메신저 새로운 목록 개체를 만들려고합니다. 새로운 객체를 기존의 기존 객체로 설정했습니다.목록 개체 값이 내용이 아닌 복사

List<string> names = new List<string>(); 
names = olderList; 

문제점은 이전 목록이 변경되면 이름 목록이 이전 목록을 가리키고 이름 변경도 발생한다는 것입니다. forech로 값을 복사하려고 시도했지만 여전히 동일한 것을하고 나서, oldList를 참조합니다.

답변

0

Java에서 지정을 할 때 내용이 아닌 참조를 복사합니다. 따라서 이름은 oldList와 동일한 메모리 주소를 가리 킵니다.

모든 값을 복사하면 이름 목록에 oldList에 저장된 각 문자열에 대한 다른 참조를 지정합니다.

문제를 해결할 수있는 아이디어는 각 요소를 추가하는 대신 foreach를 사용하여 이전 요소의 복사본 인 새 String을 만드는 것입니다. 이것은 다음과 같습니다.

names=new List<String>(); 
foreach (String s: olderList) { 
    names.add(new String(s)); 
} 

사용 된 생성자와 의미를 확인하려면 Oracle's reference site을 사용하십시오.

+0

감사를 자바 API를 Cloneable :

for(String name : olderList){ newList.add(name.clone()); } 

참조 :이 같은 작업을 수행해야합니다. 콜론이 의도적으로 놓여 있습니까? – CodeNoob

+0

컴파일하지 않았습니다 - 코드를 ckecked해야합니다. 돌이켜 보면 올바른 구문은 (String s : olderList)에 있으므로 콜론이 있어야합니다. – rlinden

0

새 목록을 만들고 모든 요소를 ​​복제해야합니다. 당신이

olderList.clone() 

를 호출 할 경우 그것은 당신에게 얕은 사본 (첫 번째 목록의 객체에 대한 참조로 즉 새 목록)을 제공 할 것입니다. 이 도움이 Object.clone()