前言:本文解決的問題
- JAVA String s ="ABc";的過程是怎樣的
Java中的String
Java中的String是不可改變的,一旦創建就不可再改變。常見的s1= s1+s2其實是重新創建了String。如果要創建可以更改的字符串類,建議使用StringBuilder或者StringBuffer。在回答口頭的問題前先來看看String的源碼。
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {
}
從String前面的修飾符我們可以看到String是final類,不可以繼承。在String提供的各種方法如subString、charAt()、concat()中,沒有可以更改String內部元素的,String一旦被更改其實就是創建了新的字符串對象。
Strings are constant; their values cannot be changed after they are created. String buffers support mutable strings. Because String objects are immutable they can be shared.
String s ="ABc";的新建過程
JAVA中有個字符串池,它存儲在堆(heap)中,可共享。任何時候一個新的對象被創建,會首先在字符串池中檢查,那個對象是否存在,如果已經存在了,則返回該對象的引用;如果不存在,則新建。具體可以看下圖。
下面是源代碼演示:
public static void main(String[] args) {
String s1 = "Apple";
String s2 = "Mangle";
String s3 = "Apple";
System.out.println(s1==s3);
System.out.println(s1==s2);
}
結果:
true false |
總結
JAVA中在使用=號創建String對象時,會線檢查JAVA String pool中有沒有該對象,如果有,則把引用值返回;如果沒有則新建。