String是标準的不可變類,對它的任何改動,其實就是建立一個新對象,再把引用指向對象
String對象建立就會在常量池中緩存,如果下次建立會判定常量池是否已經有緩存對象如果有就直接傳回引用給建立者
字元串建立的方式有兩種
String str= "wangwu";
String str = new String("wangwu");
代碼如下
原因是s3使用new String 時一定會在堆中建立一個記憶體區域,s2則會直接使用了s1的引用是以才是結果不同
1.字元串拼加的幾種方式
String str= "lao"+"wang";
String str="lao";Str+="Wang";
String str = "lao"; String str2 = str + "wang";
2.jvm對字元串的優化
根據前面的知識我們知道,對于String 的任何其實是建立 一個新對象,然後再把引用位址傳回對象但是jvm也會String
進行特殊處理以來提供程式運作效率比如以下代碼:
字元串格式化可以讓代碼更簡潔更直覺,比如,“我叫老王,今年 30
歲,喜歡讀書”在這條資訊中:姓名、年齡、興趣都是要動态改變的,如果使用“+”号拼接的話很容易出錯,這個時候字元串格式化方法 String.format()
就派上用場了,代碼如下:
轉換符 | 說明
---|---
%s | 字元串類型
%d | 整數類型(十進制)
%c | 字元類型
%b | 布爾類型
%x | 整數類型(十六進制)
%o | 整數類型(八進制)
%f | 浮點類型
%a | 浮點類型(十六進制)
%e | 指數類型
%% | 百分比類型
%n | 換行符
equals 本質上就是 ==,隻不過 String 和 Integer 等重寫了 equals 方法,把它變成了值比較。是以重寫的方法會取出位址的值然後比較是以引用也相等下面的String源碼
小夥伴們一起加油吧!今天就到這裡了