JAVA复习3
觀察字符串常量池概念
| public class StringDemo { ? ???? public static void main(String[] args) { ????????? String str1="hello"; ????????? ????????? String str2="hello"; ????????? ????????? String str3="hello"; ????????? ????????? System.out.println(str1==str2); //true ????????? ????????? System.out.println(str2==str3); //true ????????? ????????? System.out.println(str3==str1); //true ???? } } |
?
通過以上的代碼分析,發現結果都為true ,在String 直接賦值的情況下,則存在字符串常量池,賦值之后 String的內容會自動進入到字符串常量池 接下來的對象在進行賦值的時候會先去判斷字符串常量池中是否存在相同的內容,如果存在則不創建直接引用
?
?
兩種實例化方式的區別?
?
1 直接賦值?? 賦值的內容會自動進入到字符串常量池, 只開辟一塊空間
?
2 通過構造方法賦值 : 不會自動進入到字符串常量池, 開辟了兩塊空間
如果想要 通過構造方法實例化的String進入到字符串常量池 則可以手動調用intern方法
| ?????? String str2=new String("hello").intern(); |
?
?
要先驗證字符串不可改變,首先發現String類中的內容都是以字符數組完成的,數組的問題是一旦聲明則長度不可改變
?
字符串的內容是不能改變的,改變的是String的引用,如果在程序中大量的產生了字符串拼接操作,則就會大量的產生垃圾空間
?
For(int i=0;i<1000000;i++){
?
Str+=hello world;
}
String類 不適合大量的頻繁的修改字符串的內容,以后可以使用StringBuffer 或者 StirngBuilder類去解決字符串頻繁修改的操作
?
總結:
?
String類特點:
?
1 兩種實例化方式的區別?
?
直接賦值 String str=”hello”
?
構造方法賦值 String str=new String(“hello”)
?
?
直接賦值 只開辟一塊空間,會自動進入到字符串常量池
?
構造方法賦值: 開辟了兩個空間其中一塊是垃圾空間,不會自動進入到字符串常量池 但是可以通過調用intern方法手動進入常量池
?
?
2 字符串的常量就為String類的匿名對象? “hello”.equals()方法驗證
?
?
3 字符串內容一旦聲明則不可改變 ,改變只是String 類 的引用(原因底層使用的數組,數組的長度不可改變)
?
Final 類?? 不能被繼承?? 變量 不能被修改(常量)? 方法(不能被覆寫)
?
面試題:以上內容為面試題
總結
- 上一篇: 华为P60系列与Mate X3即将进入欧
- 下一篇: JAVA复习(4)