ホームページ  >  記事  >  Java  >  Javaにおける配列の詳しい説明まとめ

Javaにおける配列の詳しい説明まとめ

WBOY
WBOY転載
2022-04-25 16:08:222004ブラウズ

この記事では、java に関する関連知識を提供します。主に、命名規則、自動型推論、静的動的初期化、および多次元配列のその他の問題など、配列に関連する問題を紹介します。書き方やよくある間違いなど、皆さんのお役に立てれば幸いです。

Javaにおける配列の詳しい説明まとめ

推奨学習: 「java ビデオ チュートリアル

インデックス: 命名規則、自動型推論、静的動的初期化、マルチ次元配列 他の書き方、一般的なエラー、配列の添字の範囲外、デフォルト値の問題、配列の長さの問題、配列メモリの解析

正しい書き方:

1. ステップ分類: (以下の int は char String double などに置き換え可能)
①ワンステップ記述方法:

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

自動型推論 : 1 ステップ記述法のみ適用、右側の = new int は省略可能 [ ]

② 2 ステップ記述法:

int ids [] ;   //声明

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

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

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


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

2. ステータス分類: 静的と動的は 2 つのうちの 1 つを選択する必要があります。長さに {} を追加しないでください。また、長さを {} に追加しないでください。

##① 静的初期化:

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

② 動的初期化:

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

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

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

多次元配列
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 [][]{};写法

不过我个人不习惯。。。
int arr0 [][] = {{1,2},{3,4},{5,6}};//正确:静态、自动类型推断
int arr1 [][] = new int [3][2];
int arr2 [][] = new int [3][ ];//正确:动态、可省列数[]
int arr3 [][][] = new int [3][ ][ ];//正确:动态、可省后两个[]

デフォルト値の問題: 動的 [i][j] にはデフォルト値がありますが、静的 {} にはデフォルト値がありません (詳細説明は最後にあります)

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].......
//都会报错
エラーケース:

配列の添字が範囲外です: arr[1][1] には静的初期化中に値が与えられないため、メモリ空間は割り当てられず、コンパイルは成功しますが、アクセスではエラーが報告される場合があります。静的に初期化される配列の範囲は、arr[0][0] arr[0][1] から arr[1][0]

メモリの詳細な理解: (詳細は最後に説明) )

String cod [][] = new String [3][ ];//行のみが定義され、列数は不明です

System.out.println(cod[1][1 ]);//列が定義されていないため、デフォルト値を指定しません。実行エラー

正しい書き込み方法: ステップを 1 つ追加 cod[1]=new String [2\3\4....]; デフォルト値 null を指定して列メモリを割り当てます

よくある書き方の間違い

① int [ ] arr1 = new int [ ] ; //静的忘却 {}

② int [3] arr2 = new int [3] ; [5] {1,2,3,4,5} ; //動的に { } を含めることはできません

配列が決定される(初期化が宣言される)と、長さは固定され、変更できません

配列のメモリ割り当ては連続的であり、システムは配列に固定スペースを割り当てる必要があります。 100 個のスペースが後で他のコンテンツによって占有される場合、配列は最初の 99 個のスペースのみを使用できます。長さを変更できる場合は、 arr [100] 他のコンテンツを変更するとバグが発生します。

例は、配列の長さの問題:

2 次元配列の走査、2 層の for ループ:

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]);报错下标越界
                }
}
実行結果:

arr.length最初の次元の長さです

arr[i].length は行 i

arr [i][j].length の 2 番目の次元の長さです 3 番目の長さです行 i と列 j の次元

#配列メモリ分析:

内部層と外部層に分割された 2 次元配列を例として取り上げます。 arr[0] arr[1] の形状が外側の層であり、arr[1][2] の完全な式が内側の層

1. 外側の層 arr[1] の場合、 1 次元配列は「初期化済み」と「初期化されていない」の 2 つの状況に分けられます。

例 1:

int arr1[][] = new int [3][];
System.out.println( arr1[1] );
//运行结果:null
このとき、外層の行数のみは知られていますが、内層では知られていません。初期化、アドレスが割り当てられていないため、結果は null

int arr1[][] = new int [3][5];//任意给定列数
System.out.println(arr1[1]);
//运行结果:[I@15db9742
この時点で内部の長さが決定され、初期化が完了し、arr1[1] は a を指します。最初のアドレス [I@15db9742

a [は arr[ 1] を表します) 内部層は 1 次元配列で、I は int の最初の文字で、@ の後にアドレスが続きます

例2:

String arr1[][] = new String [3][5];
System.out.println(arr1);
//运行结果:[[Ljava.lang.String;@15db9742
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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。