更新時間:2020-05-22 16:16:05 來源:動力節(jié)點 瀏覽2087次
Java數(shù)組指針的原理特效
忙于項目管理,有陣子沒有關注具體代碼實現(xiàn)了,會看一些代碼還是有些恍惚,故抽出時間重新總結以前所學,技術是根本再忙也不能荒廢:
1.靜態(tài)初始化與動態(tài)初始化的原理是一樣的
2.java數(shù)組名就是指針
3.常數(shù)組即常指針,可改值不可改地址
網(wǎng)上摘了現(xiàn)成的代碼直接跑一邊就能總結出指針特性。
代碼塊
代碼塊語法遵循標準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,?靜態(tài)初始化與動態(tài)初始化的原理是一樣的??
????????int[]?arr?=?{?8,?3,?5,?1,?4,?2,?7?};//?靜態(tài)初始化??
????????int[]?arr2?=?new?int[]?{?8,?3,?5,?1,?4,?2,?7?};//?動態(tài)初始化??
????????//?因為創(chuàng)建數(shù)組的原理是一樣的,都是在堆空間里申請內存并賦值,所以使用也沒有去別??
????????arr[0]?=?0;//arr?=?[0,?3,?5,?1,?4,?2,?7]??
????????arr2[0]?=?0;//arr2?=?[0,?3,?5,?1,?4,?2,?7]??
????????//2,java數(shù)組名就是指針??
????????//論據(jù)1?使用指針修改原來數(shù)組的值??
????????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]??
????????//論據(jù)2?使用指針指向新數(shù)組的值??
????????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]??
????????//論據(jù)3?引用傳址??
????????swap(arr,0,1);??
????????System.out.println(Arrays.toString(arr));//?[1,?2]??
????????/*?
?????????*?因此java數(shù)組做參數(shù)是引用傳址而不是值拷貝,所以說java的數(shù)組是指針?
?????????*/??
????????//論據(jù)4?java數(shù)組不是數(shù)組??
????????/*?
?????????*?c中的數(shù)組指向的地址是不能改變的,而c中的指針是可以改變的,然而java的數(shù)組恰恰可以改變指向的地址?
?????????*?所以可以說明java數(shù)組就是c指針。?
?????????*?某位老師說過c數(shù)組就是指針其實這樣說并不嚴謹,嚴格說c數(shù)組是常指針,因為c數(shù)組的地址是不能改變的。?
?????????*/??
????????//論據(jù)5?java數(shù)組可以有常指針但沒有常量??
????????/*?
?????????*?雖然arr4是常指針,但是arr4據(jù)有指針的性質,所以arr4里的值是可以改變的。?
?????????*/??
????????arr4[0]?=?0;//編譯通過?數(shù)組的值不是常量??
//??????arr4?=?arr;//此處編譯不通過?指針arr4是常指針不可以指向新地址。??
????????/*?
?????????*?以上說明java的數(shù)組就是指針,所以數(shù)組按照指針用是完全可以的。包括,引用傳址,修改堆空間的值,指向新地址等。?
?????????*/?????
????}???
}
以上就是動力節(jié)點java培訓機構的小編針對“你需要了解的,Java數(shù)組指針的原理特效”的內容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務。