string的賦值原則:
1) new方式賦值的話,首先到pool中查詢是否有相應的值,假如沒有,在pool中建立這個物件;有的話,就到堆中例項化該物件,然後返回物件記憶體位址。
2) 字面值方式賦值的話,直接在pool中查詢,假如有的話,返回該物件;沒有的話,在pool中建立這個物件。
例項1:
結果:false true false
解析:s1,s2是兩個在堆中建立的物件,那麼兩者位址不同。s3,s4是在pool中查詢的,由於s1在建立的時候已經在pool中建立了該物件,那麼s3,s4直接返回pool中的物件,所以兩者位址一致。s1,s3指向的區域不同,s1是堆,s3是棧,所以不同。
例項2:
結果:true false
解析:如果「+」兩邊的操作符都是字面值的話,那麼拼接起來的最終值將從pool中查詢,所以s1 == s2結果為true。不符合上述規則的話,那麼拼接的最終值將會在堆中建立物件(即使pool中不存在該值,也不在pool中建立物件),所以s1 == s3結果為false。
例項3:
結果:false
例項4:
結果:true
例項3,4
解析:兩者只是s2.intern()方法呼叫位置不同而已,但是結果卻是相反的。這是因為,s2.intern()方法是用來檢查pool池,假如該值已存在於pool池的話,那麼就返回pool池中的物件;否則,將該物件放在pool池中,並返回該物件。例項3在呼叫intern方法時,pool中已存在該值,所以比較結果為false。例項4在呼叫intern方法時,pool中不存在該值,需將該物件放入pool中,所以比較結果為true。
String 型別比較大小的方式
第一種直接用字串類的compareto方法 1 2 3 string t1 20131011 string t2 20131030 intresult t1.compareto t2 第二種 適用於整數string型別 是把這個日期字串轉換成long 1 2 3 4 dateformat sdf n...
String類賦值的理解
string str 123 str abc 怎麼理解以上 先看下下這個例子 int a 5 a 4 這段 的意思是,申請乙個記憶體單元,命名為a,同時把5存到記憶體單元,然後又把4存到記憶體單元內,也就是說現在名為a 的記憶體單元的內容在被重新賦值後修改了 string str 123 str a...
String賦值及儲存
字串型別 1.string str null 未分配儲存空間,表示str不指向任何字串物件,空引用 null代表宣告了乙個空物件,對空物件做任何操作都不行的,除了 和 2.string str 分配了乙個記憶體空間,沒有進入任何物件,未初始化引用的 在方法中定義 直接使用時編譯是不通過的,必須賦予初...