인용 복사, 얕은 복사와 깊은 복사
양자의 인용은 같은 대상이며, 새로운 대상을 만들지 않았다
같은 대상의 인용이기 때문에 둘을 바꾸면 다른 대상의 값도 따라서 바뀐다
얕은 복사
얕은 복사는 비트별로 복사하는 대상입니다. 이 대상은 원시 대상의 속성 값을 가진 정확한 복사본을 만들 것입니다.
만약 속성이 기본 유형이라면 복사된 것은 기본 유형의 값이다.
속성이 인용 형식이라면 메모리 주소(즉 인용을 복제하지만 인용을 복제하지 않는 대상)를 복사하기 때문에 그 중 한 대상이 이 주소를 바꾸면 다른 대상에게 영향을 줄 수 있다.
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
딥 카피
복사된 대상의 모든 변수는 원래의 대상과 같은 값을 포함하고 다른 대상을 인용하는 변수를 제외한다.
다른 대상을 인용하는 변수는 복사된 새로운 대상을 가리키며, 더 이상 원래 인용된 대상이 아니다.다시 말하면 복제할 대상이 인용한 대상을 깊이 복제한 것이다.
@Override
protected Object clone() throws CloneNotSupportedException {
Person newPerson = (Person)super.clone();
newPerson.address = (Address) newPerson.address.clone();
return newPerson;
}
대상 서열화를 통해 심층 복사를 실현하다
대상을 바이트 서열로 서열화하면 기본적으로 이 대상의 전체 대상 그림을 서열화하고 반서열을 통해 깊이 있는 복사를 완벽하게 할 수 있습니다.
public class Person implements Serializable, Cloneable{
public Object deepClone() {
try {
ByteArrayOutputStream bo= new ByteArrayOutputStream();
ObjectOutputStream os = new ObjectOutputStream(bo);
os.writeObject(this);
ByteArrayInputStream bi=new ByteArrayInputStream(bo.toByteArray());
ObjectInputStream oi=new ObjectInputStream(bi);
return(oi.readObject());
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return null;
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.