string是引用數(shù)據(jù)類型嗎?答案是肯定的。??8個基本類型是值類型,其他都是引用??!
在Java中,數(shù)組和String字符串都不是基本數(shù)據(jù)類型,它們被當(dāng)作類來處理,是引用數(shù)據(jù)類型。
引用類型(reference type)指向一個對象,不是原始值,指向?qū)ο蟮淖兞渴且米兞俊?/p>
在java里面除去基本數(shù)據(jù)類型的其它類型都是引用數(shù)據(jù)類型,自己定義的class類都是引用類型,可以像基本類型一樣使用。
在java編程語言中,用類的一個類型聲明的變量被指定為引用類型,這是因為它正在引用一個非原始類型,這對賦值具有重要的意義。如下代碼:
int x = 5;
int y = x;
String s = "Hello";
String t = s;
四個變量被創(chuàng)建:兩個原始類型 int 和兩個引用類型String。x的值是5,而這個值被復(fù)制到y(tǒng);x和y是兩個獨立的變量且其中任何一個的進(jìn)一步的變化都不對另外一個構(gòu)成影響。至于變量s和t,只有一個String對象存在,它包含了文本"Hello",s和t均引用這個單一個對象。如果將變量t重新定義為t="World";則新的對象World被創(chuàng)建,而t引用這個對象。
“在Java里面參數(shù)傳遞都是按值傳遞”這句話的意思是:按值傳遞是傳遞的值的拷貝,按引用傳遞其實傳遞的是引用的地址值,所以統(tǒng)稱按值傳遞。
舉例:
為什么String str="scce";
String str2="scce";
str==str2返回true而String str2=new String("scce"); str==str2返回false
String str="scce"; //這是在靜態(tài)數(shù)據(jù)區(qū)創(chuàng)建了一個對象
String str2="scce"; //創(chuàng)建靜態(tài)數(shù)據(jù)對象是先在靜態(tài)數(shù)據(jù)區(qū)查,如果存在則不創(chuàng)建新的,保證靜態(tài)數(shù)據(jù)區(qū)中的數(shù)據(jù)只有一份,
str==str2返回true //指向同一個對象
String str2=new String("scce"); str==str2返回false //在堆中創(chuàng)建一個對象,引用值當(dāng)然不同