色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

java常量池和字符串常量池

王浩然1年前8瀏覽0評論

在Java中,常量池是一個存儲常量的地方。它是Java編譯器所產生的常量的存儲位置,而不是在運行時動態創建的。

常量池分為兩種:編譯時常量池和運行時常量池。編譯時常量池是在編譯階段就確定下來的,而運行時常量池是在運行時動態創建的。

public class ConstantPoolExample {
public static void main(String[] args) {
String str1 = "hello";
String str2 = "hello";
String str3 = new String("hello");
System.out.println(str1 == str2); // 輸出:true
System.out.println(str1 == str3); // 輸出:false
}
}

上面的代碼中聲明了三個字符串變量,str1和str2是通過字面量直接賦值的,而str3是通過new關鍵字創建的。其中,str1和str2的值相同,都是“hello”,而str3的值也是“hello”,但是它們的內存地址不同。

這是因為,對于str1和str2來說,Java編譯器會先檢查常量池中是否已經存在“hello”這個字符串,如果已經存在,就將其賦值給str1和str2,否則就先在常量池中創建一個新的字符串對象,然后再分別賦值給str1和str2。而str3則是在運行時動態創建的,因此其地址與常量池中的地址不同。

字符串常量池實際上就是一個特殊的常量池,用于存儲字符串常量。字符串常量池的作用是提高字符串的重用率,節省內存空間。如果多個字符串變量的值相同,那么它們就會共享同一個字符串常量池中的對象。

public class StringConstantPoolExample {
public static void main(String[] args) {
String str1 = "hello";
String str2 = "he" + "llo";
String str3 = "hel";
String str4 = "lo";
String str5 = str3 + str4;
System.out.println(str1 == str2); // 輸出:true
System.out.println(str1 == str5); // 輸出:false
}
}

上面的代碼中,首先通過字面量直接賦值的方式創建了一個字符串變量str1,接著使用“+”運算符拼接兩個字符串創建了一個新的字符串變量str2。然后,str3和str4分別是“hel”和“lo”,str5是通過拼接str3和str4得到的。

由于str1和str2的值相同,都是“hello”,因此它們共享了同一個字符串常量池中的對象。而str5的值也是“hello”,但它是通過運行時動態拼接得到的,因此其地址與常量池中的地址不同。