1. 程式人生 > >對String的賦值 和 比較方法

對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)