java什么是引用類型
java什么是引用類型
引用類型 由類型的實(shí)際值引用(類似于指針)表示的數(shù)據(jù)類型。如果為某個(gè)變量分配一個(gè)引用類型,則該變量將引用(或“指向”)原始值。不創(chuàng)建任何副本。引用類型包括類、接口、委托和裝箱值類型。
在Java中,數(shù)組和字符串都不是基本數(shù)據(jù)類型,而它們被當(dāng)作類來(lái)處理,它們是引用數(shù)據(jù)類型。
例1:Java中使用String類創(chuàng)建的對(duì)象來(lái)引用字符串
public class hello
{
public static void main(String[] args)
{
String a="abc";//1句
String b=a;//2句
a="jjj";//3句
System.out.println(b);//4句
}
}
1句:先進(jìn)行賦值號(hào)‘=‘右邊的,"abc"為一個(gè)字符串的常量,此時(shí)系統(tǒng)自動(dòng)為其分配內(nèi)存空間存儲(chǔ)它。而String a后,a為引用數(shù)據(jù)類型,a就指向了剛才分配的內(nèi)存空間。
2句:b同樣為引用數(shù)據(jù)類型,將a賦給b,所以b也指向了字符串常量"abc"的內(nèi)存空間。
3句:先進(jìn)行賦值號(hào)‘=‘右邊的,"jjj"為一個(gè)字符串常量,此時(shí)系統(tǒng)自動(dòng)為其分配內(nèi)存空間儲(chǔ)存它。a為引用數(shù)據(jù)類型,a指向了字符串常量"jjj"的內(nèi)存空間,不再指向字符串常量"abc"的內(nèi)存空間。
4句:由于b仍指向字符串常量"abc"的內(nèi)存空間,沒(méi)有改變,所以輸出結(jié)果是"abc"。
例2:
public class hello
{
public static void main(String[] args)
{
int[] c={1,2,3};//1句
int[] d=c;//2句
c=new int[4];//3句
for(int i=0;i
{
System.out.print(d[i]+" ");
}
System.out.println("");
}
}
1句:賦值號(hào)右邊{1,2,3} (相當(dāng)于new int[3])系統(tǒng)分配了長(zhǎng)度為3的int型數(shù)組的內(nèi)存空間。而c為引用數(shù)據(jù)類型,指向了該內(nèi)存空間。
2句:d也是引用數(shù)據(jù)類型,c賦給d,所以d也指向了上面的長(zhǎng)度為3的int型數(shù)組的內(nèi)存空間。
3句:賦值號(hào)右邊new int[4],系統(tǒng)分配了長(zhǎng)度為4的int型數(shù)組的內(nèi)存空間。c指向該內(nèi)存空間,而不再指向以前的內(nèi)存空間了。而此時(shí)d仍指向1句中的內(nèi)存空間。
所以"4循環(huán)"將輸出 1 2 3
例3:
public class hello
{
public static void main(String[] args)
{
int[] e={2,3,4};//1句
int[] f=e;//2句
e[0]=100;//3句
for(int i=0;i
{
System.out.print(f[i]+" ");
}
System.out.println("");
}
}
1句:賦值號(hào)右邊{2,3,4} (相當(dāng)于new int[3])系統(tǒng)分配了長(zhǎng)度為3的int型數(shù)組的內(nèi)存空間。而e為引用數(shù)據(jù)類型,指向了該內(nèi)存空間。
2句:f也是引用數(shù)據(jù)類型,e賦給f,所以f也指向了上面的長(zhǎng)度為3的int型數(shù)組的內(nèi)存空間。
3句:e指向的長(zhǎng)度為3的int型數(shù)組的內(nèi)存空間里的第一個(gè)元素的值改成100。由于f此時(shí)仍指向該內(nèi)存空間。所以"4循環(huán)"將輸出 100 3 4