java 的String

1. java裏的new 一個String對象時都會在堆內存裏產生一個對象。

String str = new String("abc") 首先檢查String Pool裏有沒有值爲abc的對象,如果沒有會先在String Pool裏產生一個值爲abc的對象,然後再在堆內存裏拷貝一個值爲abc的對象,然後把堆內存裏的對象的地址賦值給str,如果String  Pool裏有一個值爲abc的對象,則直接從String Pool裏的值拷貝一份值爲abc的對象到堆內存,然後把堆內存裏的對象的地址賦值給str.

String str = "abc' 這種方式創建的字符串,會首先看String Pool裏有沒有值爲abc的對象,如果有,則直接把String Pool裏abc對象的內存地址複製給str即可,如果沒有則在String Pool裏創建一個值爲abc的對象,然後把創建的新的對象的內存地址賦值給str即可

java 代碼
public class Test {  
                      
    public static void main(String[] args) {  
        String str1 = new String("abc");  
        String str2 = "abc";  
        String str3 = new String("abc");  
                               
        System.out.println(str1 == str2);  
        System.out.println(str1 == str3);  
        System.out.println(str2 == str3);  
    }  
                      
}  
                      
輸出結果;  
false 
false 
false


2. String.intern() ,返回的是String Pool裏相同值的對象的地址。

所以:

java 代碼
public class Test {  
               
    public static void main(String[] args) {  
        String str1 = new String("abc");  
        String str2 = "abc";  
        String str3 = new String("abc");  
                        
        System.out.println(str1 == str1.intern());//false  
        System.out.println(str2 == str2.intern());//true  
        System.out.println(str1.intern() == str3.intern());//true  
    }  
               
}



3  字符串用+號連接

如果+號兩邊都是字面常量的話,都會先去String Pool裏找值相等的對象.如果沒有找到則會在String Pool裏創建一個新的對象。

如果+號兩面有一個不是字面常量的話,則會在堆裏創建一個新的對象。

java 代碼
public class Test {  
    
    public static void main(String[] args) {  
        String hello = "hello";  
        String lo = "lo";  
             
        System.out.println(hello == "hel" + "lo");//+號兩邊都是字面常量,會在String Pool裏創建,所以返回true  
        System.out.println(hello == "hel" + lo);//+號右邊不是字面常量,則會在堆內存裏創建,所以返回false  
    }  
    
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章