JAVA中新建String的詳細過程


前言:本文解決的問題

  • 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)中,可共享。任何時候一個新的對象被創建,會首先在字符串池中檢查,那個對象是否存在,如果已經存在了,則返回該對象的引用;如果不存在,則新建。具體可以看下圖。
java-string-pool

下面是源代碼演示:

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中有沒有該對象,如果有,則把引用值返回;如果沒有則新建。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM