Java 數(shù)組創(chuàng)建與使用詳解
一、什么是數(shù)組
數(shù)組(Array)是 Java 中最基本的數(shù)據(jù)結(jié)構(gòu)之一。
它用于在內(nèi)存中存儲一組相同類型的元素,并可以通過索引(index)快速訪問。
無論是學(xué)生成績表、商品價格列表,還是二維矩陣計算,數(shù)組都是不可或缺的基礎(chǔ)知識。
在 Java 中,數(shù)組是一種容器對象,用于存儲 固定數(shù)量 的同類型值。
數(shù)組的長度一旦定義,就 不能改變。
特點:
- 數(shù)組中的元素類型 相同;
- 數(shù)組的 長度固定;
- 通過 索引(從 0 開始) 訪問;
- 數(shù)組本質(zhì)上是一個 對象(在堆內(nèi)存中創(chuàng)建)。
二、數(shù)組的聲明與創(chuàng)建
數(shù)組的聲明和創(chuàng)建分為兩步:
聲明數(shù)組
int[] numbers; // 推薦寫法 // 或 int numbers[]; // 兼容寫法(不推薦)
這里僅聲明了變量 numbers,并未真正分配內(nèi)存。
創(chuàng)建數(shù)組對象
使用 new 關(guān)鍵字分配內(nèi)存:
numbers = new int[5]; // 創(chuàng)建一個長度為5的int數(shù)組
現(xiàn)在數(shù)組的每個元素都有默認值。
聲明和創(chuàng)建可合并為一行
int[] numbers = new int[5];
內(nèi)存模型理解
當你執(zhí)行:
int[] arr = new int[3];
內(nèi)存中會發(fā)生以下事情:
| 區(qū)域 | 內(nèi)容 |
|---|---|
| 棧內(nèi)存 | 保存變量 arr(引用地址) |
| 堆內(nèi)存 | 存放數(shù)組對象 [0, 0, 0] |
Java 數(shù)組是 引用類型,實際數(shù)據(jù)存儲在堆中。
Java 數(shù)組是對象,所有數(shù)組都在堆中創(chuàng)建,棧中僅存引用。
三、數(shù)組初始化方式
Java 提供了三種常見的初始化方式:
默認初始化
當數(shù)組被 new 創(chuàng)建時,系統(tǒng)會自動為元素賦默認值。
int[] nums = new int[3]; System.out.println(nums[0]); // 輸出 0
| 數(shù)據(jù)類型 | 默認值 |
|---|---|
| byte / short / int / long | 0 |
| float / double | 0.0 |
| char | ‘\u0000’ |
| boolean | false |
| 引用類型 | null |
靜態(tài)初始化(直接賦值)
直接在定義時指定初始值:
int[] scores = {90, 85, 100, 70};
String[] names = {"Alice", "Bob", "Charlie"};
編譯器會自動推斷數(shù)組長度。
? 語法糖寫法,最常用!
動態(tài)初始化(先創(chuàng)建后賦值)
int[] ages = new int[3]; ages[0] = 18; ages[1] = 20; ages[2] = 22;
適合需要運行時賦值的場景。
四、訪問數(shù)組元素
數(shù)組索引從 0 開始,到 length-1 結(jié)束:
int[] arr = {10, 20, 30};
System.out.println(arr[0]); // 輸出 10
System.out.println(arr[2]); // 輸出 30
?? 注意數(shù)組越界(ArrayIndexOutOfBoundsException)
int[] arr = new int[3]; arr[3] = 100; // ? 錯誤:最大索引是 2
五、數(shù)組的長度屬性
每個數(shù)組都有一個內(nèi)置屬性 .length:
int[] data = {1, 2, 3, 4};
System.out.println(data.length); // 輸出 4
注意:
length是 屬性,不是方法(沒有括號!)
六、遍歷數(shù)組的方式
1. 傳統(tǒng) for 循環(huán)
int[] nums = {10, 20, 30, 40};
for (int i = 0; i < nums.length; i++) {
System.out.println("索引 " + i + " 的值是 " + nums[i]);
}
2. 增強型 for 循環(huán)(for-each)
for (int num : nums) {
System.out.println(num);
}
for-each 循環(huán)更簡潔,但無法訪問索引值。
七、二維數(shù)組(多維數(shù)組)
Java 支持多維數(shù)組,最常用的是 二維數(shù)組。
聲明與創(chuàng)建
int[][] matrix = new int[2][3]; // 2行3列
結(jié)構(gòu)示意:
| 索引 | 元素內(nèi)容 |
|---|---|
| [0][0] ~ [0][2] | 第一行 |
| [1][0] ~ [1][2] | 第二行 |
靜態(tài)初始化
int[][] matrix = {
{1, 2, 3},
{4, 5, 6}
};
訪問方式:
System.out.println(matrix[0][2]); // 輸出 3
遍歷二維數(shù)組
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
System.out.print(matrix[i][j] + " ");
}
System.out.println();
}
輸出:
1 2 3 4 5 6
八、不規(guī)則數(shù)組(Jagged Array)
Java 支持“鋸齒狀”二維數(shù)組——每一行可以長度不同:
int[][] jagged = new int[3][]; jagged[0] = new int[2]; jagged[1] = new int[4]; jagged[2] = new int[1];
九、數(shù)組的常見操作示例
import java.util.Arrays;
public class ArrayDemo {
public static void main(String[] args) {
int[] nums = {5, 2, 9, 1};
Arrays.sort(nums); // 排序
System.out.println(Arrays.toString(nums)); // 輸出 [1, 2, 5, 9]
int index = Arrays.binarySearch(nums, 5); // 二分查找
System.out.println("5 的索引是:" + index);
int[] copy = Arrays.copyOf(nums, nums.length); // 復(fù)制數(shù)組
System.out.println(Arrays.equals(nums, copy)); // true
}
}十、常見錯誤與陷阱
| 錯誤 | 說明 | 示例 |
|---|---|---|
| 數(shù)組越界 | 索引超出范圍 | arr[10] = 5; |
| 未初始化 | 未分配內(nèi)存 | int[] a; a[0] = 1; |
| 空指針異常 | 數(shù)組變量為 null | int[] b = null; b[0] = 1; |
| 混淆長度 | .length 是屬性 | arr.length() ? |
到此這篇關(guān)于Java 數(shù)組創(chuàng)建與使用詳解的文章就介紹到這了,更多相關(guān)java數(shù)組使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot實現(xiàn)列表數(shù)據(jù)導(dǎo)出為Excel文件
這篇文章主要為大家詳細介紹了在Spring?Boot框架中如何將列表數(shù)據(jù)導(dǎo)出為Excel文件,文中的示例代碼講解詳細,感興趣的小伙伴可以了解下2024-02-02
MyBatis-Plus輸出完整SQL(帶參數(shù))的三種方案
當我們使用 mybatis-plus 時,可能會遇到SQL 不能直接執(zhí)行,調(diào)試也不方便的情況,那么,如何打印完整 SQL(帶參數(shù))呢?本篇文章將介紹 3 種實現(xiàn)方式,并對比它們的優(yōu)缺點,需要的朋友可以參考下2025-02-02
RabbitMQ死信機制實現(xiàn)延遲隊列的實戰(zhàn)
本文主要介紹了RabbitMQ死信機制實現(xiàn)延遲隊列的實戰(zhàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-11-11
Java實現(xiàn)byte[]轉(zhuǎn)List的示例代碼
byte,即字節(jié),由8位的二進制組成。在Java中,byte類型的數(shù)據(jù)是8位帶符號的二進制數(shù)。List?是一個接口,它繼承于Collection的接口。它代表著有序的隊列。本文將介紹如何通過java實現(xiàn)byte[]轉(zhuǎn)List,需要的可以參考一下2022-01-01

