對String的賦值 和 比較方法
String a=“ddd“;
String b="ddd";
print(a==b);
輸出:true
如果”ABC”這個字串在java String池裡不存在,會在java String池裡建立一個建立一個String物件(“ABC”),然後str1指向這個記憶體地址,無論以後用這種方式建立多少個值為”ABC”的字串物件,始終只有一個記憶體地址被分配,之後的都是String的拷貝,Java中稱為“字串駐留”,所有的字串常量都會在編譯之後自動地駐留.
String c=new String("ddd");
String d=new String(”ddd“)
pritln(c==d)
輸出:false
因為用到new關鍵字,肯定會在heap中建立一個str2的String物件,它的value是“ABC”。同時如果這個字串再java String池裡不存在,會在java池裡建立這個String物件“ABC”。
比較直接賦值與new:
直接賦值:
a,b定義了一個字串常量,是存在於常量池的
對c,d首先,既然有new這個關鍵字,那麼一定要在堆記憶體中開闢空間,存放資料,所以 c,d 指向的是堆記憶體中的一片區域,c,d存的相當於指向堆中的地址,和指標的概念相似,所以不能用==比較。
關於程式設計中的拼接:
String str = "abc";//在常量池中建立abc
String str1 = "abcd";//在常量池中建立abcd
String str2 = str+"d";//拼接字串,此時會在堆中新建一個abcd的物件,因為str2編譯之前是未知的
String str3 = "abc"+"d";//拼接之後str3還是abcd,所以還是會指向字串常量池的記憶體地址
System.out.println(str1==str2);//false
System.out.println(str1==str3);//true
補充
在Java中游8種基本資料型別:
浮點型:float(4 byte), double(8 byte)
整型:byte(1 byte), short(2 byte), int(4 byte) , long(8 byte)
字元型: char(2 byte)