> Java > java지도 시간 > 본문

array[]: JVM 자체에서 내부적으로 관리되는 특수 클래스

DDD
풀어 주다: 2024-09-12 20:16:10
원래의
732명이 탐색했습니다.

Java(및 기타 언어)의 데이터 구조 연구를 처음 접하는 방법은 배열을 통해서입니다. Java에서 배열은 클래스, 객체, Object의 하위 항목입니다(모든 클래스가 그렇듯이). 하지만 언어에 있어서는 특별 대우를 받는 수업입니다.

일반적인 클래스 및 객체와 달리 배열의 구문과 처리는 컴파일러와 JVM(Java Virtual Machine)에서 직접 관리됩니다. 여기에는 배열을 할당, 조작 및 액세스하는 방법이 포함됩니다. 이 클래스는 소스 코드에서 직접 찾을 수 없습니다.

Java는 자동으로 배열을 이 특수 클래스의 인스턴스로 처리합니다.

아래 코드를 실행하면 다음과 같은 결과가 표시됩니다.

public class Main
{
    public static void main(String[] args) {
        int[] intArray = new int[5];
        System.out.println(intArray.getClass().getName());
        System.out.println(intArray.getClass().getSuperclass());
    }
}

로그인 후 복사

[나
클래스 java.lang.Object

이 클래스 이름 "[I"는 JVM이 정수 배열(int[])을 나타내는 데 사용하는 자동 생성된 기호 이름입니다. 각 유형에는 고유한 상징적 이름이 있습니다.

array[]: uma classe especial gerenciada internamente pela própria JVM

괄호 "["는 크기를 나타냅니다. 1차원 배열은 [, 2차원 배열은 [[, 3차원 배열은 [[[... 등)으로 표현됩니다.

선언

배열을 선언하고 초기화하려면 객체의 데이터 유형과 크기를 지정하는 것이 중요합니다.

int[] intArray = new int[5]; //array de tamanho 5
char[] charArray = new char[]{'a', 'b', 'c'}; //o compilador entende que é um array de tamanho 3
double[] doubleArray = {1.2, 1.3, 1.4, 1.5}; //o compilador entende que é um array de tamanho 4
로그인 후 복사

Java에서는 유형 대신 변수 이름에 대괄호를 넣을 수 있습니다. 예: int intArray[] = new int[5]. 하지만 이는 관례에 어긋나기 때문에 권장하지 않습니다.

배열 내에 저장된 데이터는 JVM에 의해 "연속적으로", 즉 순차적으로 메모리에 할당될 수 있습니다. 데이터에 접근하기 위해 인덱스를 사용하며, Java에서는 배열의 첫 번째 인덱스가 항상 0입니다.

예를 들어 위 charArray의 문자 'a'에 액세스하려면 charArray[0]로 검색해야 합니다. 문자 'b'는 charArray[1]에 있고 문자 'c'는 charArray[2]에 있습니다. 배열에 존재하지 않는 인덱스에 액세스하려고 하면 "IndexOutOfBounce" 오류가 발생합니다. 예를 들어 charArray[3]의 값에 액세스하려고 하는 경우입니다.

선언에 정의된 배열의 크기는 절대 변경할 수 없습니다. charArray에 3개의 요소가 있다고 선언하면 그 이상은 포함되지 않습니다. 덜 예... 더 아니오.

여기에 부록이 있습니다. 배열에 채워지지 않은 값은 배열 유형과 동일한 기본값을 가정합니다. 예를 들어 정수 배열에서는 빈 값이 0으로 채워집니다. 부울 배열에서는 false로 채워집니다. 문자열 배열에서 null이 포함됩니다.

크기와 마찬가지로 배열의 유형도 변경할 수 없습니다. 그러나 동일한 유형의 하위 유형인 경우 다른 유형의 배열을 복사하는 것이 가능합니다. 혼란스럽죠? 예를 들면 다음과 같습니다. Integer와 Double은 Number의 하위 유형입니다. 그럼...

Integer[] integerArray = {1, 2, 3};
Number[] numberArray = intgerArray;
로그인 후 복사

이 코드는 컴파일러에서 허용됩니다. 그러나 주의가 필요합니다. 여기서 이렇게 하면 컴파일 오류가 발생합니다.

numberArray[0] = 1.2;
로그인 후 복사

integerArray와 numberArray가 동일한 메모리 공간을 가리키기 때문입니다. numberArray는 첫 번째 요소로 double을 지원하지만 정수 배열은 지원하지 않으므로 numberArray는 인덱스 값 0을 변경하는 것이 "허용"되지 않습니다.

메모리

배열은 항상 동일한 유형의 데이터를 저장할 수 있으며 기본 요소와 객체를 허용합니다. 배열이 정수로 구성된 경우 char, double, float, String... 정수 값만 허용됩니다.

배열 자체는 클래스이므로(특수 클래스임에도 불구하고) 힙에 저장됩니다. 이러한 방식으로 배열은 배열에 입력된 값을 포함하는 메모리 주소를 저장합니다.

기본 배열은 연속된 메모리 블록을 할당하여 값을 직접 저장하는 반면, 객체 배열은 메모리의 다른 위치에 있는 객체에 대한 참조(포인터)를 저장합니다.

이는 기본 유형의 배열(예: int[])과 객체 배열(예: String[])이 모두 힙에 저장된다는 의미입니다. 기본 유형 배열의 경우 배열 요소의 값도 배열 자체에 인접한 힙에 직접 저장됩니다. 객체 배열의 경우 이러한 참조가 가리키는 객체는 힙의 다른 위치에 할당될 수 있습니다.

행동 양식

모든 배열 클래스에는 길이와 복제 방법이 있습니다. 첫 번째는 배열의 크기를 반환하고 두 번째는 배열의 복사본을 다른 배열(이 경우 동일한 메모리 주소에 대한 포인터)로 만듭니다.

그러나 Object 클래스(Java의 모든 클래스 포함)의 하위 요소인 배열에는 toString, equals 및 hashCode와 같은 슈퍼클래스 메소드도 있습니다.

L'utilisation de tableaux en coulisses, cependant, est ce qui se passe le plus dans la vraie vie. Même si les tableaux sont performants, il est beaucoup plus compliqué d'itérer leurs éléments et il existe des classes qui font des abstractions au-dessus des tableaux qui simplifient grandement la vie du programmeur.

C'est le cas de la classe Arrays (avec lettre majuscule). Il regroupe essentiellement les tableaux dans une classe Java standard et présente une série de méthodes très simples à mettre en œuvre pour travailler avec les données. La classe Arrays présente un autre avantage puissant : elle fonctionne avec une allocation dynamique, il est donc plus facile de gérer les collections - après tout, nous connaissons rarement la taille exacte du tableau dont nous pourrions avoir besoin. La classe Arrays peut étendre la taille de la collection à la demande, sans que le programmeur ait à créer de nouveaux tableaux (avec des lettres minuscules) de plus grandes tailles et à copier les données du tableau précédent, devenu soudainement trop petit.

Les tableaux sont également la base de classes telles que List, Stack et Queue (qui sont essentiellement un wrapper et incluent de très bonnes méthodes pour traiter les données).

Avez-vous déjà pensé que String est une classe qui résume un tableau de caractères ?

array[]: uma classe especial gerenciada internamente pela própria JVM

위 내용은 array[]: JVM 자체에서 내부적으로 관리되는 특수 클래스의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!