>  기사  >  Java  >  Java의 참조 유형과 기본 유형의 차이점은 무엇입니까

Java의 참조 유형과 기본 유형의 차이점은 무엇입니까

王林
王林앞으로
2023-05-04 16:34:061637검색

다음 표에는 기본 유형과 해당 객체 래퍼 클래스가 나열되어 있습니다.

짧게 짧게int 참조 유형과 기본 유형은 완전히 다르게 동작하며 의미도 다릅니다. 예를 들어, 메서드에 두 개의 지역 변수가 있고 하나의 변수는 기본 유형 int이고 다른 변수는 Integer 개체에 대한 개체 참조라고 가정합니다. 두 변수는 모두 지역 변수 테이블에 저장되며 둘 다 Java는 피연산자 스택에서 작동하지만 완전히 다르게 표현합니다. (이 기사의 나머지 부분에서는 피연산자 스택이나 지역 변수 테이블 대신 일반 용어 스택이 사용됩니다.) 기본 유형 int와 객체 참조는 각각 스택의 32비트를 차지합니다. (int 또는 객체 참조를 나타내려면 Java 가상 머신 구현에 최소 32비트 저장소가 필요합니다.) Integer 객체에 대한 스택 항목은 객체 자체가 아니라 객체 참조입니다. Java의 모든 객체는 객체 참조를 통해 액세스됩니다. 개체 참조는 개체가 저장된 힙 영역에 대한 포인터입니다. 기본 유형을 선언할 때 유형 자체에 대한 스토리지를 선언합니다. 많은 프로그램의 코드에는 기본 유형과 해당 개체 래퍼가 모두 포함됩니다. 두 유형을 모두 사용하여 올바르게 상호 작용하고 공존하는 방식을 이해하는 것은 동일한지 확인할 때 문제가 됩니다. 프로그래머는 코드의 오류를 방지하기 위해 이 두 가지 유형이 어떻게 작동하고 상호 작용하는지 이해해야 합니다. 예를 들어, 기본 유형에서는 메소드를 호출할 수 없지만 객체에서는 메소드를 호출할 수 있습니다.
int j = 5;  j.hashCode(); // 错误  //。..  Integer i = new Integer(5);  i.hashCode(); // 正确
기본 유형을 사용하면 new를 호출하거나 객체를 생성할 필요가 없습니다. 이렇게 하면 시간과 공간이 절약됩니다. 기본 유형과 객체를 혼합하면 할당과 관련하여 예상치 못한 결과가 발생할 수도 있습니다. 버그가 없어 보이는 코드가 원하는 작업을 수행하지 못할 수도 있습니다. 예: 이 코드는 다음과 같은 출력을 생성합니다. 정수 a와 b를 수정한 결과는 놀라운 일이 아닙니다. b의 값은 정수 변수 a에 할당되어 a의 값이 1만큼 증가합니다. 이 출력은 우리가 원하는 것을 반영합니다. 그러나 놀라운 것은 setLocation을 할당하고 호출한 후 x 및 y 객체의 출력입니다. x = y 할당을 완료한 후 x에서 setLocation을 구체적으로 호출했습니다. 어떻게 x와 y의 값이 같을 수 있습니까? 결국 우리는 y를 x에 할당한 다음 x를 변경했습니다. 이는 정수 a와 b로 수행한 것과 다르지 않습니다. 이러한 혼란은 기본 유형과 객체의 사용으로 인해 발생합니다. 할당은 두 유형에 대해 다르게 작동하지 않습니다. 하지만 모두 다르게 보일 수도 있습니다. 대입은 등호(=) 왼쪽의 값을 오른쪽의 값과 동일하게 만듭니다. 이는 이전의 int a 및 b와 같은 기본 유형에서 분명합니다. 기본이 아닌 유형(예: Point 객체)의 경우 할당은 객체 자체가 아닌 객체 참조를 수정합니다. 따라서 문 다음에 x는 y와 같습니다. 즉, x와 y는 객체 참조이므로 이제 동일한 객체를 참조합니다. 따라서 x를 변경하면 y도 변경됩니다. //1의 코드가 실행된 후 상황은 다음과 같습니다. /2의 할당이 실행된 후의 상황은 다음과 같습니다. /3에서 setLocation이 호출되면 해당 객체에 대해 이 메서드가 실행됩니다. x로 참조됩니다. Point 객체는 객체에 의해 참조되기 때문입니다.
기본 유형 포장 클래스
boolean Boolean
char Character
byte 바이트
int i = 5; // 原始类型  Integer j = new Integer(10); // 对象引用

참조 유형과 기본 유형은 서로 다른 특징과 사용법을 가지고 있습니다. 여기에는 크기 및 속도 문제, 이 유형이 저장되는 데이터 구조 유형, 참조 유형과 기본 유형이 클래스의 인스턴스 데이터로 사용될 때 발생하는 일이 포함됩니다. 기본값. 객체 참조 인스턴스 변수의 기본값은 null인 반면 기본 유형 인스턴스 변수의 기본값은 해당 유형에 따라 다릅니다.

import java.awt.Point;  class Assign  {  public static void main(String args[])  {  int a = 1;  int b = 2;  Point x = new Point(0,0);  Point y = new Point(1,1); //1  System.out.println(“a is ” + a);  System.out.println(“b is ” + b);  System.out.println(“x is ” + x);  System.out.println(“y is ” + y);  System.out.println(“Performing assignment and ” +  “setLocation.。.”);  a = b;  a++;  x = y; //2  x.setLocation(5,5); //3  System.out.println(“a is ”+a);  System.out.println(“b is ”+b);  System.out.println(“x is ”+x);  System.out.println(“y is ”+y);  }  }
a is 1  b is 2  x is java.awt.Point[x=0,y=0]  y is java.awt.Point[x=1,y=1]  Performing assignment and setLocation.。.  a is 3  b is 2  x is java.awt.Point[x=5,y=5]  y is java.awt.Point[x=5,y=5]
x = y;

참조 유형과 기본 유형을 구별하고 참조의 의미를 이해하는 것이 중요합니다. 이렇게 하지 않으면 작성된 코드가 의도한 작업을 수행할 수 없게 됩니다.

위 내용은 Java의 참조 유형과 기본 유형의 차이점은 무엇입니까의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제