참조변수의 속성값 변경이 가능한 이유는 무엇인가요? 아래 답변을 참조하세요.
Java의 데이터 유형
Java의 데이터 유형은 두 가지 범주로 나뉩니다. 기본 유형 및 참조 유형. 이에 따라 변수도 기본 유형과 참조 유형이라는 두 가지 유형으로 나뉩니다.
기본형 변수는 원래 값을 저장합니다. 즉, 나타내는 값은 값 자체입니다.
참조형 변수가 저장한 값은 입니다. 메모리 공간의 주소는 객체 자체가 아닌 객체에 대한 참조를 나타냅니다. 객체 자체는 참조 값이 나타내는 주소에 저장됩니다.
기본 유형에는 byte, short, int, long, char, float, double, Boolean, returnAddress가 포함됩니다.
참조 유형에는 클래스, 인터페이스 유형 및 배열이 포함됩니다.
java에는 값 전송만 있습니다
일상적인 코딩을 하다 보면 다음과 같은 현상을 자주 보게 됩니다.
# #1. 기본 유형 매개변수의 경우 메소드 본문에서 매개변수를 재할당해도 원래 변수의 값은 변경되지 않습니다. 2. 참조 유형 매개변수의 경우 메서드 본문에서 매개변수에 대한 참조를 다시 할당해도 원래 변수가 보유한 참조는 변경되지 않습니다. 3. 매개변수는 메서드 본문 내에서 계산되며 원래 변수의 값은 변경되지 않습니다. 4. 참조 유형 매개변수의 경우 메소드 본문은 매개변수가 가리키는 객체의 속성에 대해 작동하며, 이는 원래 변수가 가리키는 객체의 속성 값을 변경합니다. 예:public class Main { private static void getMiddleOne(boolean b, Boolean boo, Boolean[] arr){ b = true; boo = new Boolean(true); arr[0] = true; } //测试 public static void main(String[] args) { boolean b = false; Boolean boo = new Boolean(false); Boolean[] arr = new Boolean[]{false}; getMiddleOne(b, boo, arr); System.out.println(b); System.out.println(boo.toString()); System.out.println(arr[0]); /** * output: * false * false * true */ } }
다음 두 가지 사항을 이해하면 위 현상에 답할 수 있습니다.# #1. 기본 데이터 유형의 값은 값 자체이므로 패키징 클래스가 자동으로 box 및 unbox를 수행하기 때문에 예제의 b 값은 기본 유형과 동일한 방식으로 처리될 수 있습니다. 따라서 예제에서 boo의 값은 false입니다. 배열은 참조 유형이므로 arr의 값은 Boolean[]에 대한 참조입니다.
2 Java에서는 값 전송만 있고 참조 전송은 없으므로 getMiddleOne 메서드에 전달되는 세 가지 매개 변수는 b의 값 복사본, boo의 값 복사본입니다. 도착.
위의 두 가지 점에서 getMiddleOne 메서드에서 실행된 b=true 및 boo = new Boolean(true)이 복사본에 새 값을 할당하므로 원래 변수가 변경되지 않는다는 것이 분명합니다. value; 마찬가지로 arr[0] = true는 arr의 복사본이 가리키는 배열의 첫 번째 요소에 true를 복사합니다. arr의 값과 arr의 복사본 값은 모두 배열에 대한 참조입니다. arr 가리키는 배열과 arr이 가리키는 배열은 동일하므로 arr이 복사한 배열의 요소를 변경하면 원래 변수 arr에도 영향을 미칩니다.
SummaryJava에서는 값만 전달하며, 참조 유형은 값의 복사본을 전달합니다. 참고하세요.# #
위 내용은 Java에서 매개변수 전달(값 전달만, 참조 전달 없음)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!