String類部分原始碼
//被final修飾不可被繼承
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {
//String維護char[] 所以不可修改
private final char value[];
創建String物件的方式
- str1它首先會去方法區的常量池中找,有“hello”這個物件就直接參考,沒有就創建一個新的物件“hello”,存放在常量池中,
- 而new的方式首先會在堆中創建一個物件,然后再去常量池中找,有直接參考,沒有就創建一個新的物件“hello”,
兩者區別
- 直接賦值創建0或1個物件,而new的方式創建1或2個物件,
- 為了提升Java虛擬機的性能和減少記憶體的開銷,避免字串的重復創建,盡量少使用new的方式創建String物件
代碼分析
public static void main(String[] args) {
String str1 = "hello";//指向常量池中的參考
String str2 = new String("hello");//指向堆中的參考
String str3 = str2;//str3==str2 true
String str4 = "hello";//str1==str4 true
}
字串拼接
String a="A";
String b="B";
String c=new String("C");
a="A"+b;//變數拼接 指向變為堆中地址
a="A"+c;//變數拼接 指向變為堆中地址!
a="A"+"A";//常量拼接依舊指向常量池中的地址 a=="AA" true
final String d="D";//這是常量
a="A"+d//a=="AD" true
+號變數拼接底層原理 StringBuidlerd構造初始化容量為16的char[] 然后呼叫append()進行拼接 最后將結果new String()的形式賦給左邊變數
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/551283.html
標籤:其他
下一篇:返回列表