この記事では、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 ]);//列が定義されていないため、デフォルト値を指定しません。実行エラー
① 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@15db9742a [は arr[ 1] を表します) 内部層は 1 次元配列で、I は int の最初の文字で、@ の後にアドレスが続きます 例2:
String arr1[][] = new String [3][5]; System.out.println(arr1); //运行结果:[[Ljava.lang.String;@15db9742String配列の定義が完了したため、スペースが確保され、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 サイトの他の関連記事を参照してください。