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

Java中數(shù)組的使用與注意事項詳解(推薦)

 更新時間:2021年08月29日 12:54:57   作者:小李德  
數(shù)組是一組地址連續(xù)、長度固定的具有相同類型的數(shù)據(jù)的集合,通過數(shù)組下標我們可以指定數(shù)字中的每一個元素,下面這篇文章主要給大家介紹了關(guān)于Java中數(shù)組的使用與注意事項的相關(guān)資料,需要的朋友可以參考下

一.初始數(shù)組

數(shù)組的概念:數(shù)組就是一個用來存儲相同類型數(shù)據(jù)的一個容器。

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

當我們要存儲大量相同類型的時候,通過配合循環(huán)來使用就會大量減少代碼復(fù)雜程度

數(shù)組的特點:

(1)數(shù)組是一種引用類型.

(2)數(shù)組的長度是固定的.

(3)數(shù)組中每個元素的類型都是相同的.

二.數(shù)組的創(chuàng)建

對于數(shù)組的創(chuàng)建,這里和c/c++還是有些不同的,這里創(chuàng)建數(shù)組的方法共有三種方法,下面就以數(shù)組里面元素為int類型,數(shù)組大小為5的舉例,如下所示:

(1) 靜態(tài)初始化

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

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

(2)動態(tài)初始化

int[] arr = new int[5];

在這里對于數(shù)組的初始化,千萬要注意下面這種情況是錯誤的初始化

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

在這里是不能同時初始化兩次,這樣會編譯不通過,出現(xiàn)錯誤。

三.使用數(shù)組時的注意事項

(1)初始化問題

在創(chuàng)建數(shù)組后,如果沒有進行賦初值,Java會默認對數(shù)組進行初始化,這里對于每種類型的初始值都有不同。

數(shù)據(jù)類型 默認初始值
byte 0
short 0
int 0
long 0
float 0.0
double 0.0
char ‘\u0000'
String null
boolean false

(2)數(shù)組長度的使用

在Java中,可以直接調(diào)用Java中自帶的方法來求得數(shù)組的長度,使用的方法為

數(shù)組名.length

        String[] f= new String[5];
        int len = f.length;
        System.out.println(len);//5

(3)有關(guān)數(shù)組長度的問題

對于數(shù)組的長度來說,在進行開辟數(shù)組空間的時候就已經(jīng)確定了,但是在數(shù)組長度定義的問題上這里和c/c++有不同的區(qū)別,在Java中可以使用變量來進行數(shù)組的初始化,例如下面的代碼,在Java中是被允許的。

int size = 10;
int[] arr = new int[size];

(4)對于數(shù)組的訪問

 數(shù)組的索引相當于門牌號,對每一個元素來說都有對應(yīng)的位置,如果要進行訪問就需要使用指定的索引位置來進行訪問

 

對于數(shù)組的訪問范圍為[0,arr.length),左開右閉的區(qū)間范圍

但是使用這樣的方法來進行訪問數(shù)組中的每一個元素比較麻煩,下來有一種簡單的方法來進行數(shù)組的遍歷與訪問每一個元素

(5)數(shù)組的遍歷

 方法1:

使用普通的for循環(huán)來進行來進行訪問每一個元素

 方法2:

使用增強的for循環(huán)來進行遍歷數(shù)組的每一個元素,相當于對數(shù)組的拷貝

 兩種方法的區(qū)別:

在遍歷數(shù)組的時候,兩種方法是沒有任何區(qū)別的,但是在進行改變數(shù)組元素值的時候方法1就可以直接進行數(shù)組元素的改變,但是方法2對于基本數(shù)據(jù)類型的數(shù)組是沒法來進行改變的。

例題:

給一個數(shù)組的每一個元素都乘以2,這里只能用方法1來進行改變,代碼如下:

   //改變數(shù)組中的值
    public static void transformArr(int[] arr){
        for (int i = 0; i < arr.length; i++) {
            arr[i] *=2;
        }
    }

三.數(shù)組的類型

 關(guān)于類型來分,共有兩種類型,一種是基本數(shù)據(jù)類型一種是引用數(shù)據(jù)類型

兩種類型的概念和區(qū)別

基本數(shù)據(jù)類型:基本數(shù)據(jù)類型創(chuàng)建的變量,稱為基本變量,該變量空間中直接存放的是其所對應(yīng)的值。

引用數(shù)據(jù)類型:引用數(shù)據(jù)類型創(chuàng)建的變量,一般稱為對象的引用,其空間中存儲的是對象所在空間的地址。

在Java中,數(shù)組的數(shù)據(jù)類型是引用數(shù)據(jù)類型,那么數(shù)組是如何進行使用和分配空間的,首先我們需要知道jvm的內(nèi)存分布

分布圖如下所示:

1、每個部分數(shù)據(jù)區(qū)的概念:

(1) 程序計數(shù)器 (PC Register): 只是一個很小的空間, 保存下一條執(zhí)行的指令的地址。

(2)虛擬機棧(JVM Stack): 與方法調(diào)用相關(guān)的一些信息,每個方法在執(zhí)行時,都會先創(chuàng)建一個棧幀,棧幀中包含有:局部變量表、操作數(shù)棧、動態(tài)鏈接、返回地址以及其他的一些信息,保存的都是與方法執(zhí)行時相關(guān)的一些信息。比如:局部變量。當方法運行結(jié)束后,棧幀就被銷毀了,即棧幀中保存的數(shù)據(jù)也被銷毀了。

(3)本地方法棧(Native Method Stack): 本地方法棧與虛擬機棧的作用類似. 只不過保存的內(nèi)容是Native方法的局部變量. 在有些版本的 JVM 實現(xiàn)中(例如HotSpot), 本地方法棧和虛擬機棧是一起的。

(4)堆(Heap): JVM所管理的最大內(nèi)存區(qū)域. 使用 new 創(chuàng)建的對象一般在堆上保存 (例如前面的 new int[]{1, 2,3} ),堆是隨著程序開始運行時而創(chuàng)建,隨著程序的退出而銷毀,堆中的數(shù)據(jù)只要還有在使用,就不會被銷毀。

(5)方法區(qū)(Method Area): 用于存儲已被虛擬機加載的類信息、常量、靜態(tài)變量、即時編譯器編譯后的代碼等數(shù)據(jù). 方法編譯出的的字節(jié)碼就是保存在這個區(qū)域。

在數(shù)組這里我們只需要知道虛擬機棧和堆就可以了

2.數(shù)組在JVM當中的使用情況

在這里以使用數(shù)組交換兩個數(shù)來了解數(shù)組在虛擬機是如何運行的

(1)代碼:

public class Demo{
    public static void swap(int[] a){
        int tmp = a[0];
        a[0] = a[1];
        a[1] = tmp;
    }
    public static void main(String[] args) {
        int[] arr = {1,2};
        System.out.println("-----交換前------");
        System.out.println(Arrays.toString(arr));
        swap(arr);
        System.out.println("-----交換后------");
        System.out.println(Arrays.toString(arr));
    }
}

(2)運行結(jié)果:

 (3)在虛擬機中的運行步驟

 交換前執(zhí)行的結(jié)果:

 數(shù)組開辟的空間是在堆中進行開辟,但是在棧中相當于存儲的是數(shù)組的首地址,所以在上面例子中,交換的是引用類型中的值,所以能夠進行交換原來數(shù)組中值。

3.引用類型的注意事項

在使用引用類型數(shù)組的時候我們要注意我們改變的是引用類型中的引用還是引用類型中的內(nèi)容。

在上面的值交換中,我們改變的是引用類型中的內(nèi)容,那么接下來我們舉個例子來說明一下改變引用類型的引用

代碼如下:

改變數(shù)組中的值

public class Demo{
    public static void chaArr(int[] a){
        int[] b= new int[3];
        a = b;
        a[0]=100;
        a[1] = 200;
    }
    public static void main(String[] args) {
        int a[] = {10,20};
        System.out.println("改變前--------");
        System.out.println(Arrays.toString(a));
        chaArr(a);
        System.out.println("改變后--------");
        System.out.println(Arrays.toString(a));
    }
}

運行結(jié)果:

 我們可以發(fā)現(xiàn),在chaArr()方法中我們改變的值在數(shù)組中沒有發(fā)生變化,這是為什么,這是因為,我們在chaArr()中將a的引用地址進行了改變,之后操作的是新創(chuàng)建的數(shù)組b中的結(jié)果,所以a中的結(jié)果沒有發(fā)生改變,圖示如下:

 所以在使用數(shù)組時要注意是否在中間發(fā)生了引用地址的改變。

四.關(guān)于引用類型的返回值

在之前學過的返回值都是基本數(shù)據(jù)類型中的返回值,在學過數(shù)組之后,我們知道引用類型也有返回值,接下來我使用返回值來求一個存放斐波那契數(shù)列結(jié)果的數(shù)組,如果所需要的數(shù)組大小<=0,則返回null,否則返回一個數(shù)組。

代碼如下:

public class Demo{
    
   //返回一個斐波納契數(shù)列的數(shù)組
    public static int[] fibArr(int n){
        if(n<=0){
            return null;
        }
        int[] fiArr = new int[n];
        fiArr[0] = 1;
        if(n==1){
         return fiArr;
        }
        fiArr[1] = 1;
        for(int i=2;i<n;i++){
            fiArr[i]=fiArr[i-1]+fiArr[i-2];
        }
        return fiArr;
    }
    public static void main(String[] args) {
 
        System.out.println(Arrays.toString(fibArr(10)));
 
    }
}

前10項的輸出結(jié)果如下:

總結(jié)

到此這篇關(guān)于Java中數(shù)組的使用與注意事項的文章就介紹到這了,更多相關(guān)Java數(shù)組使用與注意內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

东乡县| 南部县| 沁源县| 扎囊县| 读书| 南城县| 丽江市| 东源县| 永嘉县| 东港市| 松潘县| 铜山县| 宜州市| 万盛区| 齐齐哈尔市| 莒南县| 遂平县| 抚远县| 临洮县| 常德市| 重庆市| 大石桥市| 松溪县| 磐安县| 大足县| 阳城县| 沂水县| 乐亭县| 湖北省| 馆陶县| 二连浩特市| 潞城市| 三门峡市| 南部县| 连江县| 潜山县| 京山县| 株洲市| 蛟河市| 湛江市| 通榆县|