메신저 새로운 목록 개체를 만들려고합니다. 새로운 객체를 기존의 기존 객체로 설정했습니다.목록 개체 값이 내용이 아닌 복사
List<string> names = new List<string>();
names = olderList;
문제점은 이전 목록이 변경되면 이름 목록이 이전 목록을 가리키고 이름 변경도 발생한다는 것입니다. forech로 값을 복사하려고 시도했지만 여전히 동일한 것을하고 나서, oldList를 참조합니다.
메신저 새로운 목록 개체를 만들려고합니다. 새로운 객체를 기존의 기존 객체로 설정했습니다.목록 개체 값이 내용이 아닌 복사
List<string> names = new List<string>();
names = olderList;
문제점은 이전 목록이 변경되면 이름 목록이 이전 목록을 가리키고 이름 변경도 발생한다는 것입니다. forech로 값을 복사하려고 시도했지만 여전히 동일한 것을하고 나서, oldList를 참조합니다.
Java에서 지정을 할 때 내용이 아닌 참조를 복사합니다. 따라서 이름은 oldList와 동일한 메모리 주소를 가리 킵니다.
모든 값을 복사하면 이름 목록에 oldList에 저장된 각 문자열에 대한 다른 참조를 지정합니다.
문제를 해결할 수있는 아이디어는 각 요소를 추가하는 대신 foreach를 사용하여 이전 요소의 복사본 인 새 String을 만드는 것입니다. 이것은 다음과 같습니다.
names=new List<String>();
foreach (String s: olderList) {
names.add(new String(s));
}
사용 된 생성자와 의미를 확인하려면 Oracle's reference site을 사용하십시오.
새 목록을 만들고 모든 요소를 복제해야합니다. 당신이
olderList.clone()
를 호출 할 경우 그것은 당신에게 얕은 사본 (첫 번째 목록의 객체에 대한 참조로 즉 새 목록)을 제공 할 것입니다. 이 도움이 Object.clone()
감사를 자바 API를 Cloneable :
참조 :이 같은 작업을 수행해야합니다. 콜론이 의도적으로 놓여 있습니까? – CodeNoob
컴파일하지 않았습니다 - 코드를 ckecked해야합니다. 돌이켜 보면 올바른 구문은 (String s : olderList)에 있으므로 콜론이 있어야합니다. – rlinden