Java에서 함수 수신 값 수정: 기본 유형 및 참조 유형
기본 유형 및 참조 유형 기본 유형: 값은 어떻게 수정하더라도 현재 스택 프레임의 값만 수정되며 외부에서는 변경되지 않습니다. 이 때 외부 변수를 변경해야 합니다. 활성 할당을 반환해야 합니다. 참조 데이터 유형: 포인터는 메서드가 호출되면 복사본 참조가 스택에 푸시되고 할당은 복사본의 참조만 변경합니다. 그러나 복사 참조의 값을 직접 변경하고 참조 주소의 객체를 수정하면 당연히 메소드 외부에서 이 주소를 참조하는 객체가 수정됩니다. (두 개의 참조, 동일한 주소, 모든 수정 동작은 두 참조에 동시에 적용됩니다.)
public class Test2 { public static void setValue(String str){ str = "ss"; } public static void setValue(Man str){ str = new Man("test"); } public static class Man{ private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public Man(String name) { this.name = name; } @Override public String toString() { return "Man{" + "name='" + name + '\'' + '}'; } } public static void main(String[] args) { String str = "s"; setValue(str); System.out.println(str); Man man = null; setValue(man); System.out.println(man); } }
위의 코드 연습에서 보듯이 결과가 출력됩니다.
s null
이유는 메소드가 실행될 때 스택 프레임 개념을 가지고 있기 때문입니다. , 스택에 푸시되면 Push 메서드 매개 변수만 전달된 매개 변수의 복사본입니다.
Java 고급 기능
이번에는 데이터 유형 구별: 기본 유형과 참조 유형
기본 유형:값은 어떻게 수정되든 상관없이 로컬 변수 테이블에 저장됩니다. 현재 스택 프레임만 수정합니다. 이때 메서드 실행 후에는 메서드 값이 메서드 외부에서 변경되지 않습니다. 외부 변수를 변경해야 하는 경우 활성 할당이 반환되어야 합니다.
참조 데이터 유형: 메서드가 호출되면 포인터가 로컬 변수 테이블에 저장되고, 할당은 복사본의 참조만 변경합니다. 그러나 복사 참조의 값을 직접 변경하고 참조 주소의 개체를 수정하면 당연히 메서드 외에 이 주소를 참조하는 개체도 수정됩니다. (두 개의 참조, 동일한 주소, 수정 사항은 동시에 두 참조에 모두 적용됩니다.)
예를 들어
public static void setValue(StringBuilder str){ str = new StringBuilder("sss"); } public static void setValue2(StringBuilder str){ str.append("sss"); } public static void main(String[] args) { StringBuilder str = new StringBuilder(); setValue(str); System.out.println(str.toString()); setValue2(str); System.out.println(str.toString()); }
String에 대해서는 본질적으로 최종 유형 char 배열이므로 수정할 수 없으며, 할당되고 매개변수가 전달될 때 수정됩니다. 이 경우 실제로는 새 객체이고 외부 문자열 참조에 적용하려면 외부 변수를 반환하고 다시 할당해야 합니다.
이해하려면 문자열 소스 코드의 메서드를 살펴보세요.
/** * Returns a string resulting from replacing all occurrences of * {@code oldChar} in this string with {@code newChar}. * <p> * If the character {@code oldChar} does not occur in the * character sequence represented by this {@code String} object, * then a reference to this {@code String} object is returned. * Otherwise, a {@code String} object is returned that * represents a character sequence identical to the character sequence * represented by this {@code String} object, except that every * occurrence of {@code oldChar} is replaced by an occurrence * of {@code newChar}. * <p> * Examples: * <blockquote><pre class="brush:php;toolbar:false"> * "mesquite in your cellar".replace('e', 'o') * returns "mosquito in your collar" * "the war of baronets".replace('r', 'y') * returns "the way of bayonets" * "sparring with a purple porpoise".replace('p', 't') * returns "starring with a turtle tortoise" * "JonL".replace('q', 'x') returns "JonL" (no change) *
참조 유형은 얕은 복사 및 깊은 복사 현상을 유발합니다.
관련 기사:
JavaScript에서 범위 밖의 변수를 수정하는 방법
PHP 클로저 함수에 매개변수를 전달하고 외부 변수, PHP 변수를 사용하는 방법
위 내용은 Java에서 함수 수신 값 수정: 기본 유형 및 참조 유형의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

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

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

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

일부 애플리케이션이 제대로 작동하지 않는 회사의 보안 소프트웨어에 대한 문제 해결 및 솔루션. 많은 회사들이 내부 네트워크 보안을 보장하기 위해 보안 소프트웨어를 배포 할 것입니다. ...

많은 응용 프로그램 시나리오에서 정렬을 구현하기 위해 이름으로 이름을 변환하는 솔루션, 사용자는 그룹으로, 특히 하나로 분류해야 할 수도 있습니다.

시스템 도킹의 필드 매핑 처리 시스템 도킹을 수행 할 때 어려운 문제가 발생합니다. 시스템의 인터페이스 필드를 효과적으로 매핑하는 방법 ...

IntellijideAultimate 버전을 사용하여 봄을 시작하십시오 ...

데이터베이스 작업에 MyBatis-Plus 또는 기타 ORM 프레임 워크를 사용하는 경우 엔티티 클래스의 속성 이름을 기반으로 쿼리 조건을 구성해야합니다. 매번 수동으로 ...

Java 객체 및 배열의 변환 : 캐스트 유형 변환의 위험과 올바른 방법에 대한 심층적 인 논의 많은 Java 초보자가 객체를 배열로 변환 할 것입니다 ...

Redis 캐싱 솔루션은 제품 순위 목록의 요구 사항을 어떻게 인식합니까? 개발 과정에서 우리는 종종 a ... 표시와 같은 순위의 요구 사항을 처리해야합니다.

전자 상거래 플랫폼에서 SKU 및 SPU 테이블의 디자인에 대한 자세한 설명이 기사는 전자 상거래 플랫폼에서 SKU 및 SPU의 데이터베이스 설계 문제, 특히 사용자 정의 판매를 처리하는 방법에 대해 논의 할 것입니다 ...
