最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java數(shù)組定義、使用與核心應(yīng)用完全指南

 更新時間:2025年12月11日 11:31:30   作者:GUNFes  
Java數(shù)組是存儲同類型數(shù)據(jù)的容器,通過固定長度的連續(xù)內(nèi)存空間實(shí)現(xiàn)高效存取,這篇文章主要介紹了Java數(shù)組定義、使用與核心應(yīng)用完全指南的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

一、 數(shù)組基礎(chǔ)概念

1.1 什么是數(shù)組

數(shù)組:可以看成是相同類型元素的一個集合。在內(nèi)存中是一段連續(xù)的空間。

為什么要使用數(shù)組呢?

當(dāng)我們需要存儲大量相同類型的數(shù)據(jù)時,數(shù)組是我們的最佳選擇。

比如:

// ? 不推薦:每個成績一個變量
int score1 = 70;
int score2 = 80;
// ... 100個成績需要100個變量

// ? 推薦:使用數(shù)組
int[] scores = new int[100];  // 一個變量存儲100個成績

可以看到數(shù)組可以大大提高我們的效率。

1.2 數(shù)組的基本概念

數(shù)據(jù)類型[] 數(shù)組名 = new 數(shù)據(jù)類型[長度];

如下圖:

這是一個數(shù)組 其中 

1. array 叫做 引用變量 簡稱:引用

2. 上面這個數(shù)組在創(chuàng)建時并沒有直接給定你元素個數(shù),而是直接將具體的數(shù)據(jù)內(nèi)容指定 這種叫靜態(tài)初識化

3.

這兩種方法本質(zhì)上和上面的沒什么區(qū)別,new是創(chuàng)建新的對象

1. 這種定義方式?jīng)]有 初始化 當(dāng)前指定的值 ,默認(rèn)里面的所有值為0,如果是引用類型默認(rèn)則是null

2. 這種指定長度,沒有給定默認(rèn)值的叫 動態(tài)初始化

二、 數(shù)組的內(nèi)存模型

2.1 基本類型 vs 引用類型

// 基本類型:變量直接存儲值
int a = 10;  // 內(nèi)存中:a -> 10

// 引用類型:變量存儲的是地址
int[] arr = new int[]{1, 2, 3};  
// 內(nèi)存中:arr -> 0x123 (地址) -> [1,2,3]

2.2 內(nèi)存結(jié)構(gòu)圖

在JVM中 有Java虛擬機(jī)棧 方法區(qū) 本地方法棧 程序計(jì)數(shù)器 堆 今天我們先來看看棧和堆

如圖,假如我們給定一個地址為0x9的array數(shù)組 里面有1-5的元素,它在棧和堆是這樣表示出來的

2.3 空引用與空指針異常

int[] arr = null;  // arr不指向任何對象

// ? 以下都會拋出 NullPointerException
System.out.println(arr.length);
System.out.println(arr[0]);
arr[0] = 10;

調(diào)試技巧:遇到NullPointerException,找到報錯行,檢查那個引用為 null

三、 數(shù)組的基本操作

3.1 訪問與修改元素

int[] arr = {10, 20, 30, 40, 50};

// 訪問:通過下標(biāo)(從0開始)
System.out.println(arr[0]);  // 輸出: 10
System.out.println(arr[4]);  // 輸出: 50

// 修改
arr[0] = 100;  // 第一個元素改為100
arr[2] = 300;  // 第三個元素改為300

// ? 下標(biāo)越界
System.out.println(arr[5]);  // 運(yùn)行時異常:ArrayIndexOutOfBoundsException

3.2 遍歷數(shù)組的三種方式

int[] arr = {1, 2, 3, 4, 5};

// 方式1:傳統(tǒng)for循環(huán)(可以獲取下標(biāo))
for (int i = 0; i < arr.length; i++) {
    System.out.println("下標(biāo)" + i + ": " + arr[i]);
}

// 方式2:for-each循環(huán)(只能獲取值,不能改下標(biāo))
for (int num : arr) {
    System.out.println(num);
}

// 方式3:while循環(huán)(不常用)
int i = 0;
while (i < arr.length) {
    System.out.println(arr[i]);
    i++;
}

3.3 獲取數(shù)組的長度

int[] arr = {1, 2, 3, 4, 5};
int length = arr.length;  // length = 5
// 注意:length是屬性,不是方法,不要加括號!

四、數(shù)組的拷貝

4.1 淺拷貝 (共享同一數(shù)組)

int[] arr = {1, 2, 3, 4, 5};
int[] newArr = arr;  // 淺拷貝:兩個引用指向同一個數(shù)組

newArr[0] = 100;  // 修改newArr也會影響arr
System.out.println(arr[0]);  // 輸出: 100

4.2 深拷貝 (創(chuàng)建新數(shù)組)

深拷貝有三種方式:

方式1:使用Arrays.copyOf

int[] arr = {1, 2, 3, 4, 5};
int[] newArr = Arrays.copyOf(arr, arr.length);  // 深拷貝

newArr[0] = 100;  // 只修改newArr,不影響arr
System.out.println(arr[0]);  // 輸出: 1(不變)

方式2:拷貝指定范圍

int[] arr = {1, 2, 3, 4, 5};
// 拷貝下標(biāo)[1,3)范圍的元素(左閉右開)
int[] newArr = Arrays.copyOfRange(arr, 1, 3);  // 得到[2, 3]

方式3:手動實(shí)現(xiàn)深拷貝

public static int[] copyArray(int[] arr) {
    int[] newArr = new int[arr.length];
    for (int i = 0; i < arr.length; i++) {
        newArr[i] = arr[i];
    }
    return newArr;
}

五、數(shù)組作為方法參數(shù)

5.1 傳遞引用,可以修改數(shù)組內(nèi)容

public static void modifyArray(int[] array) {
    array[0] = 99;  // 會修改原數(shù)組
}

public static void main(String[] args) {
    int[] arr = {1, 2, 3};
    modifyArray(arr);
    System.out.println(arr[0]);  // 輸出: 99(被修改了)
}

5.2 重新賦值不會影響原數(shù)組

public static void reassignArray(int[] array) {
    // array指向新對象,不會影響原數(shù)組
    array = new int[]{9, 8, 7};
}

public static void main(String[] args) {
    int[] arr = {1, 2, 3};
    reassignArray(arr);
    System.out.println(arr[0]);  // 輸出: 1(沒變)
}

總結(jié):

  1. 方法內(nèi)部修改數(shù)組元素 → 會影響原數(shù)組
  2. 方法內(nèi)部讓數(shù)組引用指向新對象 → 不會影響原數(shù)組                                                        

六、二維數(shù)組

6.1 定義和初始化

// 靜態(tài)初始化
int[][] arr1 = {
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9}
};

// 動態(tài)初始化(指定行列數(shù))
int[][] arr2 = new int[3][4];  // 3行4列

// 動態(tài)初始化(只指定行數(shù))
int[][] arr3 = new int[3][];   // 3行,每行長度不同
arr3[0] = new int[2];  // 第0行有2列
arr3[1] = new int[3];  // 第1行有3列
arr3[2] = new int[4];  // 第2行有4列

6.2 遍歷二維數(shù)組

int[][] arr = {
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9}
};

for (int i = 0; i < arr.length; i++) {        // 遍歷行
    for (int j = 0; j < arr[i].length; j++) {  // 遍歷列
        System.out.print(arr[i][j] + " ");
    }
    System.out.println();  // 換行
}

// 輸出:
// 1 2 3
// 4 5 6
// 7 8 9

6.3 獲取二維數(shù)組信息

int[][] arr = new int[3][4];
System.out.println(arr.length);     // 輸出: 3(行數(shù))
System.out.println(arr[0].length);  // 輸出: 4(第0行的列數(shù))

七、數(shù)組工具類 Arrays

7.1 常用方法

import java.util.Arrays;

int[] arr = {5, 3, 8, 1, 9};

// 1. 數(shù)組轉(zhuǎn)字符串(方便打印)
System.out.println(Arrays.toString(arr));  // [5, 3, 8, 1, 9]

// 2. 排序(升序)
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));  // [1, 3, 5, 8, 9]

// 3. 二分查找(必須先排序?。?
int index = Arrays.binarySearch(arr, 5);  // 返回下標(biāo): 2
int notFound = Arrays.binarySearch(arr, 10);  // 返回負(fù)數(shù): -6

// 4. 填充(全部賦相同值)
int[] arr2 = new int[5];
Arrays.fill(arr2, 7);  // [7, 7, 7, 7, 7]

// 5. 比較兩個數(shù)組是否相等
int[] a = {1, 2, 3};
int[] b = {1, 2, 3};
System.out.println(Arrays.equals(a, b));  // true

八、注意事項(xiàng)與常見錯誤

8.1 必須記住的規(guī)則

  1. 下標(biāo)從0開始:長度為n的數(shù)組,下標(biāo)的范圍是[0,n-1]
  2. length是屬性arr.length,不是arr.length()
  3. 數(shù)組長度固定:創(chuàng)建后不能改變長度
  4. 引用類型默認(rèn)為nullString[ ] arr = new String[3];每個元素都是null  

8.2 常見錯誤

// ? 錯誤1:下標(biāo)越界
int[] arr = {1, 2, 3};
System.out.println(arr[3]);  // ArrayIndexOutOfBoundsException

// ? 錯誤2:空指針異常
int[] arr2 = null;
System.out.println(arr2.length);  // NullPointerException

// ? 錯誤3:類型不匹配
// int[] arr3 = {1.0, 2.0, 3.0};  // 編譯錯誤,double不能直接賦給int

// ? 正確做法
int[] arr4 = new int[3];
arr4[0] = 1;  // 先創(chuàng)建,后賦值

九、總結(jié)要點(diǎn)

  1. 數(shù)組是引用類型,存儲的是地址,不是值本身
  2. 內(nèi)存分棧和堆:引用在棧,數(shù)組對象在堆
  3. 深拷貝 vs 淺拷貝:理解區(qū)別很重要
  4. Arrays 工具類:掌握常用方法,提高效率
  5. 二維數(shù)組:本質(zhì)是 "數(shù)組的數(shù)組"

到此這篇關(guān)于Java數(shù)組定義、使用與核心應(yīng)用完全指南的文章就介紹到這了,更多相關(guān)Java數(shù)組定義、使用與應(yīng)用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java 深入淺出分析Synchronized原理與Callable接口

    Java 深入淺出分析Synchronized原理與Callable接口

    Synchronized關(guān)鍵字解決的是多個線程之間訪問資源的同步性,synchronized關(guān)鍵字可以保證被它修飾的方法或者代碼塊在任意時刻只能有一個線程執(zhí)行,Runnable是執(zhí)行工作的獨(dú)立任務(wù),但是不返回任何值。如果我們希望任務(wù)完成之后有返回值,可以實(shí)現(xiàn)Callable接口
    2022-03-03
  • IDEA Maven Mybatis generator 自動生成代碼(實(shí)例講解)

    IDEA Maven Mybatis generator 自動生成代碼(實(shí)例講解)

    下面小編就為大家分享一篇IDEA Maven Mybatis generator 自動生成代碼的實(shí)例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • java實(shí)現(xiàn)超市庫存管理系統(tǒng)

    java實(shí)現(xiàn)超市庫存管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)超市庫存管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • 關(guān)于@Value注解取不到值的幾種情況

    關(guān)于@Value注解取不到值的幾種情況

    這篇文章主要介紹了關(guān)于@Value注解取不到值的幾種情況,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java中HashSet和LinkedHashSet的常用方法示例詳解

    Java中HashSet和LinkedHashSet的常用方法示例詳解

    本文主要介紹了Java中HashSet和LinkedHashSet的常用方法,包括添加、刪除、檢查元素、獲取大小、遍歷和轉(zhuǎn)換為數(shù)組等操作,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2025-12-12
  • Java中spring boot 字符串判斷是否為空方法小結(jié)

    Java中spring boot 字符串判斷是否為空方法小結(jié)

    這篇文章主要介紹了Java中spring boot字符串判斷是否為空,通過安裝依賴,結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2023-11-11
  • JAVA語言編程格式高級規(guī)范

    JAVA語言編程格式高級規(guī)范

    這篇文章主要介紹了JAVA語言編程格式高級規(guī)范,需要的朋友可以參考下
    2015-05-05
  • 淺談Spring中HandlerMapping的使用

    淺談Spring中HandlerMapping的使用

    這篇文章主要介紹了淺談Spring中HandlerMapping的使用,Spingmvc中的HandlerMapping負(fù)責(zé)解析請求URL,對應(yīng)到Handler進(jìn)行處理,這里的Handler一般為Controller里的一個方法method,也可以為servlet或者Controller等,需要的朋友可以參考下
    2023-08-08
  • 全面匯總SpringBoot和SpringClould常用注解

    全面匯總SpringBoot和SpringClould常用注解

    Java注解是附加在代碼中的一些元信息,用于一些工具在編譯、運(yùn)行時進(jìn)行解析和使用,起到說明、配置的功能,這篇文章就帶你來了解一下
    2021-08-08
  • Java實(shí)現(xiàn)的簡單數(shù)字時鐘功能示例

    Java實(shí)現(xiàn)的簡單數(shù)字時鐘功能示例

    這篇文章主要介紹了Java實(shí)現(xiàn)的簡單數(shù)字時鐘功能,涉及java日期時間及JFrame框架圖形界面操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2019-02-02

最新評論

仁布县| 房山区| 万年县| 贺兰县| 贺兰县| 兴山县| 元氏县| 招远市| 皋兰县| 宁乡县| 新巴尔虎左旗| 苏尼特右旗| 伊金霍洛旗| 万全县| 姜堰市| 巩义市| 田东县| 虞城县| 广丰县| 浦东新区| 苍山县| 慈利县| 文成县| 阜南县| 民和| 金沙县| 樟树市| 阳高县| 女性| 萨嘎县| 南昌市| 贞丰县| 定陶县| 收藏| 章丘市| 乌苏市| 宝山区| 黑水县| 高青县| 宝兴县| 宜兰市|