Java에서 값 전달과 참조 전달의 차이점에 대한 심층 분석
Java 프로그래밍에서는 매개변수 전달 상황을 자주 접하게 되는데, 매개변수 전달 방법에는 값 전달과 참조 전달이라는 두 가지 방법이 있습니다. 이 두 가지 전달 방법은 Java에서 서로 다른 특성과 적용 시나리오를 가지고 있습니다.
값별 전달은 함수 호출 시 실제 매개변수의 값을 형식 매개변수에 전달하는 것을 의미합니다. 함수 내 형식 매개변수를 수정해도 실제 매개변수의 값에는 영향을 미치지 않습니다. 참조에 의한 전달(Pass-by-Reference)은 함수가 호출될 때 실제 매개변수의 참조가 형식 매개변수로 전달됨을 의미합니다. 함수 내의 형식 매개변수에 대한 수정은 실제 매개변수에 영향을 미칩니다.
값 전달과 참조 전달의 차이점을 더 잘 이해하기 위해 간단한 샘플 코드를 살펴보겠습니다.
public class PassByValueDemo { public static void main(String[] args) { int num1 = 10; int num2 = 20; System.out.println("交换前:num1=" + num1 + ", num2=" + num2); swap(num1, num2); System.out.println("交换后:num1=" + num1 + ", num2=" + num2); Person person1 = new Person("Tom"); Person person2 = new Person("Jerry"); System.out.println("交换前:person1=" + person1 + ", person2=" + person2); swap(person1, person2); System.out.println("交换后:person1=" + person1 + ", person2=" + person2); } public static void swap(int a, int b) { int temp = a; a = b; b = temp; } public static void swap(Person p1, Person p2) { Person temp = p1; p1 = p2; p2 = temp; } } class Person { private String name; public Person(String name) { this.name = name; } @Override public String toString() { return name; } }
위 코드에서는 swap
메서드를 사용하여 두 숫자와 두 숫자를 교환합니다. Person
개체의 값입니다. 값으로 전달하는 경우 swap
메서드가 Person
개체의 숫자와 값을 교환할 수 있을 것으로 예상합니다. 그러나 코드를 실행해 보면 숫자의 값만 교환되고 Person
객체의 값은 변경되지 않은 것을 알 수 있습니다. swap
方法来交换两个数字和两个Person
对象的值。在进行值传递的情况下,我们期望swap
方法能够交换数字和Person
对象的值。然而,在运行代码后,我们会发现仅仅交换了数字的值,而Person
对象的值并没有发生变化。
这是因为Java中的值传递是将实际参数的值拷贝一份给形式参数,并在函数内部对形式参数进行修改,不会影响到原来的实际参数。所以,在swap(int a, int b)
方法中,交换的是a
和b
的值,而不影响num1
和num2
的值。
而对于swap(Person p1, Person p2)
方法中的交换,我们期望能够交换person1
和person2
的值。然而,由于Java中的引用传递是将实际参数的引用传递给形式参数,形式参数和实际参数指向同一个对象。而在交换的过程中,我们只是交换了形式参数p1
和p2
的引用,而并没有修改实际参数person1
和person2
指向的对象,所以交换并没有生效。
可以通过以下代码来正确交换Person
对象:
public static void swap(Person p1, Person p2) { String temp = p1.getName(); p1.setName(p2.getName()); p2.setName(temp); }
在上述代码中,通过调用getName()
和setName()
方法来获取和修改Person
swap(int a, int b)
메서드에서는 a
와 b
의 값이 에 영향을 주지 않고 교환됩니다. num1
과 num2
의 값입니다.
swap(Person p1, Person p2)
방식의 교환에서는 person1
과 의 값을 교환할 수 있을 것으로 예상됩니다. 사람2
. 그러나 Java에서 참조 전달은 실제 매개변수의 참조를 형식 매개변수에 전달하는 것이므로 형식 매개변수와 실제 매개변수는 동일한 객체를 가리킵니다. 교환 과정에서 형식 매개변수 p1
및 p2
의 참조만 교환했으며 실제 매개변수 person1
및 는 수정하지 않았습니다. >person2
는 객체를 가리키므로 교환이 적용되지 않습니다. 🎜🎜다음 코드를 사용하면 Person
개체를 올바르게 교환할 수 있습니다. 🎜rrreee🎜위 코드에서 getName()
및 setName()
을 호출하여 > 올바른 개체 교환을 달성하기 위해 Person
개체의 속성 값을 얻고 수정하는 방법입니다. 🎜🎜요약하자면, 값 전달과 참조 전달은 Java에서 서로 다른 두 가지 매개변수 전달 방법입니다. 값으로 전달하면 실제 매개변수의 값이 수정되지 않지만, 참조로 전달하면 실제 매개변수가 가리키는 객체가 수정됩니다. 이 두 가지 전달 방법을 이해하고 올바르게 사용하는 것은 Java 프로그래밍에 매우 중요합니다. 🎜위 내용은 Java에서 값 전달과 참조 전달의 차이점에 대한 자세한 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

이 기사에서는 Java 프로젝트 관리, 구축 자동화 및 종속성 해상도에 Maven 및 Gradle을 사용하여 접근 방식과 최적화 전략을 비교합니다.

이 기사에서는 Maven 및 Gradle과 같은 도구를 사용하여 적절한 버전 및 종속성 관리로 사용자 정의 Java 라이브러리 (JAR Files)를 작성하고 사용하는 것에 대해 설명합니다.

이 기사는 카페인 및 구아바 캐시를 사용하여 자바에서 다단계 캐싱을 구현하여 응용 프로그램 성능을 향상시키는 것에 대해 설명합니다. 구성 및 퇴거 정책 관리 Best Pra와 함께 설정, 통합 및 성능 이점을 다룹니다.

이 기사는 캐싱 및 게으른 하중과 같은 고급 기능을 사용하여 객체 관계 매핑에 JPA를 사용하는 것에 대해 설명합니다. 잠재적 인 함정을 강조하면서 성능을 최적화하기위한 설정, 엔티티 매핑 및 모범 사례를 다룹니다. [159 문자]

Java의 클래스 로딩에는 부트 스트랩, 확장 및 응용 프로그램 클래스 로더가있는 계층 적 시스템을 사용하여 클래스로드, 링크 및 초기화 클래스가 포함됩니다. 학부모 위임 모델은 핵심 클래스가 먼저로드되어 사용자 정의 클래스 LOA에 영향을 미치도록합니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

Dreamweaver Mac版
시각적 웹 개발 도구

PhpStorm 맥 버전
최신(2018.2.1) 전문 PHP 통합 개발 도구
