從陣列來真正開始了解java與C的區別
- 陣列
- java中如何創建陣列
- 如何訪問和修改陣列
- foreach回圈
- 如何在java中進行傳址操作
- 參考
- new關鍵字
- 傳參考
上一話中,我們談到了java中的資料型別和運算子,我們有一種感覺,就是和C感覺沒有很大差別
那么從這篇博文中,我們就可以真正了解一些不一樣的東西
首先,讓我們來了解一下陣列吧!
陣列
java中如何創建陣列
那么什么是陣列呢?即儲存相同元素的集合
在java中,我們可以有如下定義陣列的方式
int[] arr1 = {1,2,3,4,5,6,7,8,9};
int[] arr2 = new int[]{1,2,3,4,5,6,7,8,9,10};
int[] arr3 = new int[20];
System.out.println(Arrays.toString(arr1));
System.out.println(Arrays.toString(arr2));
System.out.println(Arrays.toString(arr3));
//輸出結果:
//[1, 2, 3, 4, 5, 6, 7, 8, 9]
//[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
//[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
如何訪問和修改陣列
既然知道了如何創建陣列,我們再來了解一下如何對陣列進行訪問和修改
同C語言一樣,java中的陣列可以用’[ ]'來對陣列進行訪問,如下面代碼
int[] arr = new int[50];//陣列名.length可以獲取陣列的長度
for (int i = 0; i < arr.length; i++) {
arr[i] = i+1;
}
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+" ");
}
//輸出結果:
//1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 // 44 45 46 47 48 49 50
foreach回圈
java中還有一個特別的遍歷方式就是foreach回圈
int[] arr = {1,2,3,4,5,6,7,8,9,10};
for (int x:arr) {//格式 臨時變數:陣列名
System.out.print(x+" ");
}
//輸出結果:
//1 2 3 4 5 6 7 8 9 10
foreach的代碼意思是每次回圈的時候會定義一個臨時變數x(或者其他),同時將陣列的元素拷貝在x上,然后對x進行操作,(所以無法用foreach對陣列進行賦值,只能讀取陣列的值)
如何在java中進行傳址操作
參考
我們知道如果在一個方法(或者函式中)想要交換傳進來的兩個值,如果只進行傳值操作是無法完成兩個數的交換的,如下圖代碼
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println(a);
System.out.println(b);
swap(a,b);
System.out.println(a);
System.out.println(b);
}
public static void swap(int a,int b){
int tmp = a;
a = b;
b=tmp;
}
//輸出結果:
//10
//20
//10
//20
當然,在C語言中我們可以使用&來獲取地址從而進行傳址操作來解決這個問題,那么在java中如何解決這種問題呢?
那就是傳參考
何為參考?
在這里我們就要回想到java的資料型別,在上文中我們說過,java有八大基本資料型別還有參考型別,如下圖

談到參考型別,我們不可避免的要說到new這個關鍵字
new關鍵字
new可以簡單理解為創建物件的關鍵字,也可理解為在堆區開辟記憶體的關鍵字,如下圖代碼
public static void main(String[] args) {
int[] arr = new int[10];
}
接下來讓我們來分析一下這段代碼有什么具體含義,我們用下圖來做為講解
當函式運行到main函式的時候,會在堆疊區為main函式開辟一塊堆疊幀(也就是記憶體塊),然后,我們創建了一個名叫arr的陣列,
使用new關鍵字在堆區開辟了一塊記憶體區域,用來存盤新創建的物件,
這時,陣列名就存盤在堆疊幀中,這個陣列名就叫做參考,那么存盤的是啥呢?是陣列在堆區中所存放的地址,
(這里我們假設陣列在堆區的地址是0x555,那么arr這個參考存盤的也就是0x555)

在這,我們和C語言做個小對比,我們知道,C語言只有用記憶體開辟函式如malloc calloc realloc 才能在堆區中開辟空間,
而在java里面,我們使用new 就可以在堆區中開辟空間,
我們可以做一個小實驗來證明參考中存的是否是地址,具體看下圖代碼
public static void main(String[] args) {
int[] arr1 = {1,2,3,4,5,6,7,8,9};
int[] arr2 = new int[]{1,2,3,4,5,6,7,8,9,10};
int[] arr3 = new int[20];
System.out.println(arr1);
System.out.println(arr2);
System.out.println(arr3);
}
//輸出結果:
//[I@1b6d3586
//[I@4554617c
//[I@74a14482
可見,陣列名存的是地址,但是,雖然是地址,但java中并沒有指標,因此也就沒有了很多像C一樣對指標的操作,
由此,我們受到啟發,java中參考型別的參考存的是地址,是所對應的物件的地址
傳參考
回到我們交換兩個數的問題,我們就可以通過傳陣列來解決
public static void main(String[] args) {
int[] arr = {10,20};
System.out.println(arr[0]);
System.out.println(arr[1]);
swap(arr);
System.out.println(arr[0]);
System.out.println(arr[1]);
}
public static void swap(int[] arr){
int tmp = arr[0];
arr[0] = arr[1];
arr[1]=tmp;
}
//輸出結果:
//10
//20
//20
//10
為啥傳參考可以解決這個問題呢?因為參考里面存的是地址,我們對參考進行操作,相當于直接在堆區里面操作陣列,所以,直接修改的就是陣列本身,也就達到了我們的效果,
最后,我們來做一個小總結
java中的參考是什么?是一個地址,
java中如何進行傳址操作? 通過傳參考,
(具體理解堆疊區和堆區里,參考和物件的關系很重要)
到這,我相信你已經對java的參考和java傳址操作有了一定了解了,至于更多有關陣列的知識,我會在之后的博文中更新,希望這篇文章對你有所幫助,
感謝觀看,如有錯誤,歡迎指正,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/278070.html
標籤:java
上一篇:Servlet開發
