>Java >java지도 시간 >Java는 값으로 객체를 전달합니까, 아니면 참조로 객체를 전달합니까?

Java는 값으로 객체를 전달합니까, 아니면 참조로 객체를 전달합니까?

DDD
DDD원래의
2024-11-16 16:17:02422검색

Does Java Pass Objects by Value or by Reference?

Java의 "값에 의한 전달"과 "참조에 의한 전달" 구별

Java에서 변수는 객체가 아닌 객체에 대한 참조를 저장합니다. 그들 자신. 이러한 구별은 객체가 메서드에 인수로 전달되는 방식에 영향을 미칩니다.

시나리오 A: 참조 전달

다음 코드 조각을 고려하세요.

Foo myFoo;
myFoo = createFoo();

public Foo createFoo() {
   Foo foo = new Foo();
   return foo;
}

createFoo()의 결과가 myFoo에 할당되면 새로운 Foo 객체가 생성되어 foo에 할당됩니다. 이제 참조 변수 myFoo가 이 새 개체를 가리킵니다. 나중에 myFoo를 수정하면 변경 사항이 원래 Foo 객체에 영향을 미칩니다. 그러나 새로운 참조 변수가 myFoo에 할당되면 다른 개체를 가리킵니다.

시나리오 B: 값 전달

이를 다음과 대조해 보세요.

Foo myFoo;
createFoo(myFoo);

public void createFoo(Foo foo) {
   Foo f = new Foo();
   foo = f;
}

이 경우 createFoo() 메서드는 myFoo에 대한 참조를 받습니다. 그러나 메서드 내에서 새로운 Foo 객체가 생성되어 로컬 참조 변수 f에 할당됩니다. foo = f 줄은 호출 메서드에 저장된 참조가 아닌 메서드 내의 참조만 변경합니다. 따라서 메서드에서 foo에 대한 모든 수정 사항은 원본 Foo 객체에 반영되지 않습니다.

결론

이러한 예에 따르면 Java는 항상 통과한다는 것이 분명합니다. 참조가 아닌 값으로 인수합니다. 전달된 값은 객체 자체가 아닌 객체에 대한 참조입니다. 결과적으로 메서드 내의 참조 변수에 대한 변경 사항은 원래 개체에 영향을 주지 않습니다. 단, 참조를 통해 객체 자체에 적용된 변경 사항은 원본 객체에 반영됩니다.

위 내용은 Java는 값으로 객체를 전달합니까, 아니면 참조로 객체를 전달합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.