2017-02-08 3 views
-2

초보자입니다. 다음에 대해 궁금합니다.내 개체 사본 만들기

의 내가 클래스 foo을 가지고 객체 foo first을 만들어 말을하고 그것으로 일부 데이터를 넣어 보자 : 동일한 메모리를

foo first = new foo(); 
first.data="mydata"; 

난 다음 다른 개체 foo second를 만들려하고 내용이 동일하게 (그러나 위치)는 first입니다. 이를 달성하기 위해 다음을 수행 할 수 있습니까?

foo second = new foo(); 
second = first; 

또는

이 단지 동일한 메모리 주소로 firstsecond를 설정 않으며, 난 그냥 효율적으로 메모리에 하나의 객체에 두 개의 핸들을 얻기?

개체의 복제에 대해 읽었는데 너무 복잡해 보입니다. 나는 foo second = new foo();에 새로운 foo을 정의하는 문제를 겪었 기 때문에 컴파일러는 second = first;이 첫 번째 것을 가리 키지 않고 전체를 복사하려고한다는 것을 깨달아야한다. 그것은 그것이 작동하는 방법인가?

제 질문은 이것이 작동하지 않는 이유는 무엇입니까? 컴파일러를 이와 같이 설정 한 위의 논리의 결함은 무엇입니까?

+2

"개체의 복제에 대해 읽었을 때 너무 복잡해 보입니다."- 음, 두려운 점이 있습니다. 자세한 내용을 알아야 할 것입니다. clone()을 통해 [copy ctor] (http://www.javapractices.com/topic/TopicAction.do?Id=12)를 권하고 싶습니다. 직접 변수 액세스를 통해 [accessors/mutators] (http://stackoverflow.com/a/15711958/2071828)를 사용하는 것이 좋습니다. –

+0

* "어떻게 작동합니까?"* 그렇다면 다른 사용자가 자신의 개체를 복제하는 데 "복잡한"작업을한다고 생각하는 이유는 무엇입니까? – Tom

+0

@Tom goot point! 나는 나의 질문이 오히려 "왜 이것이 어떻게 작동하지 않는가"에 관한 것이라고 생각한다. – Kagaratsch

답변

3

가장 좋은 방법은 복사 생성자을 사용하는 것입니다.

clone()에 대한 이야기를 보았을 때, 논란의 여지가 있으며 낙담했습니다 (이유를 알고 싶다면 Google). 주목할만한 예외는 : 배열! 단지 그들이 복잡한 객체가 너무 경우 자신의 복사 contructors를 사용하여 필드를 복사, 또 다른 푸 소요 푸의 생성자에서

Foo first = new Foo(); 
first.data="mydata"; 

Foo second = new Foo(first); 

:

복사 생성자는 다음과 같이 작동합니다.

+0

그건 천재 야! 고맙습니다. – Kagaratsch