> Java > java지도 시간 > 본문

Java 요약의 배열에 대한 자세한 설명

WBOY
풀어 주다: 2022-04-25 16:08:22
앞으로
2012명이 탐색했습니다.

이 글은 명명 규칙, 자동 유형 추론, 정적 및 동적 초기화, 다차원 배열을 작성하는 기타 방법, 일반적인 오류 등 배열과 관련된 문제를 주로 소개하는 java에 대한 관련 지식을 제공합니다. 아래 내용을 보시고 모든 분들께 도움이 되었으면 좋겠습니다.

Java 요약의 배열에 대한 자세한 설명

추천 학습: "java 비디오 튜토리얼"

색인: 명명 규칙, 자동 유형 추론, 정적 및 동적 초기화, 다차원 배열을 작성하는 다른 방법, 작성 시 일반적인 실수, 범위를 벗어난 배열 첨자 , 기본값 문제, 배열 길이 문제, 배열 메모리 구문 분석

올바른 쓰기:

1. 단계 분류 : (다음 int는 char String double 등으로 대체 가능)
① One- step writing :

int [] ids = new int []{1001,1002,1003};// 声明+初始化

int ids [] = new int []{1001,1002,1003}; // [ ]位置有两种放法


int ids [] = {1001,1002,1003};//自动类型推断,new int []可省


/**********错误示范***错误示范***错误示范***错误示范************/

int ids [] = new [] int{1001,1002,1003};//只有定义时的[]可以乱动
로그인 후 복사

자동 타입 추론 : one-step writing 방식에서만 적용 가능, 오른쪽의 = new int [ ] 생략 가능 [ ]

② Two-step writing 방식 :

int ids [] ;   //声明

ids = new int [ ] {1001,1002,1003} ;   //初始化

/**********错误示范***错误示范***错误示范***错误示范************/

int ids [];
ids [] = new int {1001,1002,1003};//分两步时,左边不加[]


int ids [];
ids = {1001,1002,1003};//分两步时,没有类型推断
로그인 후 복사

2. 상태 분류: 정적 및 동적 둘 중 하나를 선택해야 하며, 길이에 {}를 추가하지 마세요. 길이 없이 {}를 제공하세요.

① 정적 초기화:

两个[ ]均为空
String [] name = new String [] {"张三","李四"} ;
//也可写为String [] name = {"张三","李四"};
로그인 후 복사
e

② 동적 초기화 :

后面的[ ]必须带数字规定长度,并且不能{}赋值

String [ ] name ;
name = new String [2] ;
//可以合为一步写String name [] = new String [2];

/**********错误示范****错误示范****错误示范********/
int ids [3][4] = XXXXXXXXX;
int ids [3][ ] = XXXXXXXXX;
int ids [ ][4] = XXXXXXXXX;
로그인 후 복사

다차원 배열

RreeerReeee

기본값 문제: 동적 [i] [j]에는 기본값이 있고, static {}에는 기본값이 없습니다(자세한 설명은 마지막에 설명)

int arr1 [][] =XXXXXXXXXXX;
int [] arr2 []=XXXXXXXXXXX;
int [][] arr3 =XXXXXXXXXXX;
//都是正确写法
Java主张 int [] arr = new int []{}; 写法



//多维数组同理
int [] arr[][] =XXXXXXXX;
int [][] arr[] =XXXXXXXX;
随便瞎基8放都是正确的
Java主张 int [][] arr = new int [][]{};写法

不过我个人不习惯。。。
로그인 후 복사

오류 사례:

배열 첨자가 범위를 벗어났습니다. arr[1][1]이 정적 초기화 중에 존재하지 않습니다. 값을 제공하면 메모리 공간이 할당되지 않지만 오류가 발생합니다. 접속시 신고됩니다. 이 정적 초기화의 배열 범위는 arr[0][0] arr[0][1] ~ arr[1][0]

으로 제한됩니다. 심층적인 메모리 이해: (자세한 설명은 마지막에 있음)

String cod [][] = new String [3][ ];//행만 정의되었으며 열 수는 알 수 없습니다
System.out.println(cod[1][1]);//열은 정의되지 않았습니다. 기본값은 제공되지 않습니다. 실행 오류

올바른 쓰기 방법: 한 단계 추가 cod[1]=new String [234....]; 기본값이 null인 경우 열 메모리 할당

일반적인 잘못된 쓰기 방법

① int [ ] arr1 = new int [ ]; ③ int [ ] arr3 = new int [5] {1,2,3,4,5} //배열이 다음과 같으면 동적을 가져올 수 없습니다. 결정(선언 + 초기화)되면 길이가 고정되어 변경할 수 없습니다. 배열의 메모리 할당은 지속적으로 배열에 대해 고정된 공간을 할당해야 합니다. 나중에 100개의 공간이 다른 콘텐츠에 의해 점유되면 배열은 처음 99개의 공백만 사용할 수 있습니다. 길이를 변경할 수 있는 경우 arr[100]은 다른 공백을 변경합니다. 콘텐츠가 버그를 생성합니다

예제는 배열 길이 문제를 보여줍니다. 2차원 배열 순회, 2- 레이어 for 루프:

int arr0 [][] = {{1,2},{3,4},{5,6}};//正确:静态、自动类型推断
int arr1 [][] = new int [3][2];
int arr2 [][] = new int [3][ ];//正确:动态、可省列数[]
int arr3 [][][] = new int [3][ ][ ];//正确:动态、可省后两个[]
로그인 후 복사

실행 결과:

arr.length는 첫 번째 차원 길이입니다

arr[i]. 길이는 i번째 행의 두 번째 차원 길이입니다

arr[i][j ].length는 i번째 행 j 열의 3차원 길이입니다

배열 메모리 분석:

2차원 배열을 예로 들어 내부 레이어와 외부 레이어로 나눕니다. 외부 레이어는 arr[0] arr[1] 형태이고 내부 레이어는 arr[1][2] 1의 완전한 표현입니다. 외부 레이어 arr[1]의 경우 1-입니다. 차원 배열은 "초기화됨"과 "초기화되지 않음"의 두 가지 상황으로 구분됩니다.

예제 1:

int arr0 [][] = new int [2][2];//动态初始化,分配内存
//数组内的4个成员全部默认为0,编译运行都不会报错


int arr0 [][] = new int [][]{ {1,2},{3} };
//静态初始化,编译能通过,arr0[1][1]没有默认值(未分配空间)
//编译能通过,运行到arr[1][1]会报错



int arr0[][] = new int [3][] ;
// 输出arr0[3][0]  arr0[3][1]  arr0[3][2]  arr0[3][3].......
//都会报错
로그인 후 복사

이때 외부 행 수만 알 수 있지만 내부 레이어는 초기화되지 않고 주소도 없습니다. 할당되었으므로 결과는 null

public class Test2 {
	public static void main(String args[]) {
	int arr[][] = { {1,2,3},{4,5,6,7},{8,9},{10}};
		
		for(int i = 0 ; i <arr.length ; i++){//arr.length
			for(int j = 0 ; j<arr[i].length ;j++){//arr[i].length
				System.out.println(arr[i][j]+"    ");
				}
                        System.out.println();		
}
		//System.out.println(arr[2][2]);报错下标越界
                }
}
로그인 후 복사

이때 내부 레이어의 길이가 결정되고 초기화가 완료됩니다. arr1[1]은 첫 번째 주소 [I@15db9742

A]를 가리킵니다. arr[1]의 레이어는 1차원 배열입니다. I는 int의 첫 글자이고 @ 뒤에 Address

가 옵니다. 예 2:

int arr1[][] = new int [3][];
System.out.println( arr1[1] );
//运行结果:null
로그인 후 복사

String 배열은 완전히 정의되었기 때문에 공간이 할당되고 arr1이 포인트가 됩니다. arr1[0][0] 주소(전체 배열의 첫 번째 주소)

两个[[表示里面有二维数组,java.lang.String;是包名

例3:

float arr1[][] = new float  [3][5];
System.out.println(arr1[0]);
//结果:[F@15db9742
로그인 후 복사

外层元素初始化值为:地址值

内层元素初始化值为:与一维数组初始化情况相同

一维数组初始化:

1.数组元素是整形int long short :  0

2.数组元素是浮点型float double : 0.0

3.数组元素是boolean型:false

4.数组元素是引用类型  : null

5.数组元素是char型 :0 或 '\u0000' 而非‘0’

数字0,而不是字符0,对应的ASCII码不一样

'\u0000'是Unicode码第0000号位,是一个空格符,但是不是键盘上的空格

验证如下:

經典例題:

 

解:b e可以,acdf都不行

推荐学习:《java视频教程

위 내용은 Java 요약의 배열에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:csdn.net
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿