更新時間:2020-05-22 16:16:05 來源:動力節點 瀏覽2134次
Java數組指針的原理特效
忙于項目管理,有陣子沒有關注具體代碼實現了,會看一些代碼還是有些恍惚,故抽出時間重新總結以前所學,技術是根本再忙也不能荒廢:
1.靜態初始化與動態初始化的原理是一樣的
2.java數組名就是指針
3.常數組即常指針,可改值不可改地址
網上摘了現成的代碼直接跑一邊就能總結出指針特性。
代碼塊
代碼塊語法遵循標準markdown代碼,例如:
package?transformation;
import?java.io.BufferedReader;
import?java.io.ByteArrayInputStream;
import?java.io.ByteArrayOutputStream;
import?java.io.IOException;
import?java.io.InputStreamReader;
import?java.io.ObjectInputStream;
import?java.io.ObjectOutputStream;
import?java.io.Serializable;
import?java.security.MessageDigest;
import?java.security.NoSuchAlgorithmException;
import?java.util.Arrays;
import?java.util.HashMap;
import?java.util.Iterator;
import?java.util.Map;
public?class?shuzu_zhizheng?{
????public?static?void?swap(int?a[],int?i,int?j)??
????{??
????????int?t?=?a[i];??
????????a[i]?=?a[j];??
????????a[j]?=?t;??
????}??
????public?static?int[]?a()?{??
????????int[]?a?=?{?2,?1?};??
????????return?a;??
????}??
????static?final?int?arr4[]?=?{?8,?3,?5,?1,?4,?2,?7?};?
????public?static?void?main(String?args[])?{?
????????//1,?靜態初始化與動態初始化的原理是一樣的??
????????int[]?arr?=?{?8,?3,?5,?1,?4,?2,?7?};//?靜態初始化??
????????int[]?arr2?=?new?int[]?{?8,?3,?5,?1,?4,?2,?7?};//?動態初始化??
????????//?因為創建數組的原理是一樣的,都是在堆空間里申請內存并賦值,所以使用也沒有去別??
????????arr[0]?=?0;//arr?=?[0,?3,?5,?1,?4,?2,?7]??
????????arr2[0]?=?0;//arr2?=?[0,?3,?5,?1,?4,?2,?7]??
????????//2,java數組名就是指針??
????????//論據1?使用指針修改原來數組的值??
????????int[]?arr3?=?arr;//?arr3?就是java的指針了?相當于?C語言的?int?*arr3?=?arr;指針arr3指向arr的地址??
????????arr3[1]?=?0;//使用arr3指針修改arr的1號地址的值,??
????????System.out.println(Arrays.toString(arr));//?這時arr?=?[0,?0,?5,?1,?4,?2,?7]??
????????//論據2?使用指針指向新數組的值??
????????arr?=?a();//?arr?=?[2,?1]?arr的地址指向了方法a中的變量a在堆空間申請的地址。arr3仍然指向arr的原地址??
????????System.out.println(Arrays.toString(arr));//?[2,?1]??
????????System.out.println(Arrays.toString(arr3));//?[0,?0,?5,?1,?4,?2,?7]??
????????//論據3?引用傳址??
????????swap(arr,0,1);??
????????System.out.println(Arrays.toString(arr));//?[1,?2]??
????????/*?
?????????*?因此java數組做參數是引用傳址而不是值拷貝,所以說java的數組是指針?
?????????*/??
????????//論據4?java數組不是數組??
????????/*?
?????????*?c中的數組指向的地址是不能改變的,而c中的指針是可以改變的,然而java的數組恰恰可以改變指向的地址?
?????????*?所以可以說明java數組就是c指針。?
?????????*?某位老師說過c數組就是指針其實這樣說并不嚴謹,嚴格說c數組是常指針,因為c數組的地址是不能改變的。?
?????????*/??
????????//論據5?java數組可以有常指針但沒有常量??
????????/*?
?????????*?雖然arr4是常指針,但是arr4據有指針的性質,所以arr4里的值是可以改變的。?
?????????*/??
????????arr4[0]?=?0;//編譯通過?數組的值不是常量??
//??????arr4?=?arr;//此處編譯不通過?指針arr4是常指針不可以指向新地址。??
????????/*?
?????????*?以上說明java的數組就是指針,所以數組按照指針用是完全可以的。包括,引用傳址,修改堆空間的值,指向新地址等。?
?????????*/?????
????}???
}
以上就是動力節點java培訓機構的小編針對“你需要了解的,Java數組指針的原理特效”的內容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習