Maison  >  Article  >  Java  >  Explication détaillée des tableaux dans le résumé Java

Explication détaillée des tableaux dans le résumé Java

WBOY
WBOYavant
2022-04-25 16:08:221950parcourir

Cet article vous apporte des connaissances pertinentes sur java, qui présente principalement les problèmes liés aux tableaux, notamment les règles de dénomination, l'inférence de type automatique, l'initialisation statique et dynamique, d'autres façons d'écrire des tableaux multidimensionnels, les erreurs courantes, etc. regardez le contenu ci-dessous, j'espère qu'il sera utile à tout le monde.

Explication détaillée des tableaux dans le résumé Java

Apprentissage recommandé : "Tutoriel vidéo Java"

Index : règles de dénomination, inférence de type automatique, initialisation statique et dynamique, autres façons d'écrire des tableaux multidimensionnels, mauvaises façons d'écrire courantes, indices de tableau hors de limites, problèmes de valeur par défaut, problème de longueur des tableaux, analyse de la mémoire du tableau

Écriture correcte :

1 : (L'int suivant peut être remplacé par char String double, etc.)
① Un. -écriture en étapes :

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};//只有定义时的[]可以乱动

Inférence de type automatique : Applicable uniquement en écriture en une étape, vous pouvez omettre = new int [ ] à droite [ ]

② Écriture en deux étapes :

int ids [] ;   //声明

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

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

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


int ids [];
ids = {1001,1002,1003};//分两步时,没有类型推断

2. Classification des statuts : Statique et dynamique doivent choisir l'un des deux, et ne pas ajouter {} à la longueur , Donner {} sans longueur

① Initialisation statique :

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

② Initialisation dynamique :

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

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

/**********错误示范****错误示范****错误示范********/
int ids [3][4] = XXXXXXXXX;
int ids [3][ ] = XXXXXXXXX;
int ids [ ][4] = XXXXXXXXX;

tableau multidimensionnel RreeerReeee

problème de valeur par défaut : dynamique [i] [j] a une valeur par défaut, statique {} n'a pas de valeur par défaut (explication détaillée à la fin)

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 [][]{};写法

不过我个人不习惯。。。
Cas d'erreur :

Indice du tableau hors limites : arr[1][1] n'existe pas lors de l'initialisation statique Donnez une valeur, donc aucun espace mémoire n'est alloué La compilation peut réussir, mais une erreur sera générée. signalé lors de l’accès. La plage du tableau de cette initialisation statique est limitée à arr[0][0] arr[0][1] à arr[1][0]

Compréhension approfondie de la mémoire : (explication détaillée à la fin)

String cod [][] = new String [3][ ];//Seules les lignes sont définies, le nombre de colonnes est inconnu

System.out.println(cod[1][1]);//Les colonnes ne sont pas définies, aucune valeur par défaut n'est donnée. Erreur d'exécution

Manière correcte d'écrire : ajouter une étape cod[1]=new String [234....] ; allouer de la mémoire aux colonnes, étant donné la valeur par défaut null

Mauvaise façon courante d'écrire

① int [ ] arr1 = new int [ ]; ③ int [ ] arr3 = new int [5] {1,2,3,4,5}; //Dynamic ne peut pas apporter {}Une fois le tableau déterminé (déclaration + initialisation), la longueur est fixe et ne peut pas être modifiée

L'allocation mémoire du tableau est En continu, le système doit allouer un espace fixe pour le tableau. Si les 100 espaces sont occupés ultérieurement par un autre contenu, alors le. Le tableau ne peut utiliser que les 99 premiers espaces. Si la longueur peut être modifiée, alors arr[100] modifiera les autres espaces. Le contenu génère un bugUn exemple illustre le problème de longueur du tableau :

Parcours de tableau bidimensionnel, à deux dimensions. couche pour la boucle :

int arr0 [][] = {{1,2},{3,4},{5,6}};//正确:静态、自动类型推断
int arr1 [][] = new int [3][2];
int arr2 [][] = new int [3][ ];//正确:动态、可省列数[]
int arr3 [][][] = new int [3][ ][ ];//正确:动态、可省后两个[]
Résultat d'exécution :

arr.length est la longueur de la première dimension

arr[i]. ].length est la longueur de la troisième dimension de la i-ème rangée j colonne

Analyse de la mémoire du tableau :

Prenons comme exemple un tableau bidimensionnel, divisé en couches interne et externe. La couche externe a la forme de arr[0] arr[1], et la couche interne est l'expression complète de arr[1][2]. tableau dimensionnel. Il sera divisé en deux situations : "initialisé" et "non initialisé" :

Exemple 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].......
//都会报错

A ce moment, seul le nombre de lignes externes est connu, mais la couche interne n'est pas initialisée et aucune adresse est attribué, donc le résultat est nul

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]);报错下标越界
                }
}

À ce moment, la longueur de la couche interne est déterminée et l'initialisation est terminée arr1[1] pointe vers une première adresse [I@15db9742

A [ signifie que l'intérieure. la couche de arr[1] est un tableau unidimensionnel. I est la première lettre de int et @ est suivi de Address

Exemple 2 :

int arr1[][] = new int [3][];
System.out.println( arr1[1] );
//运行结果:null

Parce que le tableau String est complètement défini, l'espace est alloué et arr1 points. à l'adresse de arr1[0][0] (la première adresse de l'ensemble du tableau)

两个[[表示里面有二维数组,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视频教程

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer