String:字串型別
String:字串型別。
有多種構造方式,常用的有以下三種:
//第一種用的最多
String str1 = "helloworld";
//第二種
String str2 = new String("helloworld");
//第三種
char[] array = {'h','e','l','l','o'};
String str3 = new String(array);
“helloword”是儲存在堆中的常量池當中的。並且在常量池中只有一份。
String原始碼中是被final所修飾的,被final修飾的都不能被繼承
被final所修飾的方法:密封方法
被final所修飾的類:密封類
String使用雙等號進行比較時,並不是比較內容,比較的是兩個引用是否指向同一個物件。
然後選擇題中會問到str1是否等於str2
String str1 = "hello";
String str2 = new String("hello");
System.out.println(str1 == str2); //false
System.out.println(str1.equals(str2)); //true
因為str1 == str2 比較的是兩個的引用的地址是否相同,如下圖,
而str1.equals(str2)比較的是兩個裡面的內容是否相同。
再看下面兩個:理解常量池中的儲存的物件只有一份
String str3 = "he"+"llo"; //兩個常量在比較前就會合成hello
System.out.println(str1 == str3); //hello在常量池中只有一份
//true
String str4 = "he"; //he在常量池
String str5 = str4+"llo"; //llo也是常量,在常量池,str4是變數,在執行時才會
System.out.println(str4 == str5); //str5引用的是he 和llo拼接起來的在堆當中的value
//false
最後一個:
String str6 = new String("he")+"llo";
System.out.println(str1 == str6);
str6引用的是:new了一個value在堆上,指向he;value的地址和llo的地址的組合就是str6所指向的。
String的intern方法手動把String物件加入到常量池中。
String str1 = "hello";
String str2 = new String("hello").intern();
System.out.println(str1 == str2);
上面已經說了不加intern是false,加了之後就會把hello的地址給str2。
String字串不可改變:
為什麼不可變?看下面程式碼註釋
String str = "hello" ;
str = str + " world" ; //在常量池中建立了一個world
str += "!!!" ; //又在常量池中建立了一個 hello world
System.out.println(str);
//列印出hello world ,但world本身沒有變
還有就是substring修改:也是不能改變原來的Hello字串
String str = "Hello";
str = "h" + str.substring(1); //建立新的字串
System.out.println(str);
相關文章
- Redis 五大資料型別之 String(字串)Redis大資料資料型別字串
- String 型別型別
- 什麼是.NET的強型別字串(Strongly typed string)?型別字串
- C++ 字串字面值和 string 不是同一型別C++字串型別
- Java中Switch支援String字串?為什麼不支援long型別?Java字串型別
- BigDecimal轉為String型別、int型別Decimal型別
- string型別介紹型別
- (JS基礎)String 型別JS型別
- redis-6.string型別Redis型別
- SCSS 字串 型別CSS字串型別
- TypeScript 字串型別TypeScript字串型別
- Redis筆記(4)redis五大資料型別1----string(字串)Redis筆記大資料資料型別字串
- string 字串字串
- String字串字串
- 基本資料型別與字串型別資料型別字串
- String.valueOf和強制型別轉換(String)的區別型別
- JavaScript的String和Boolean型別JavaScriptBoolean型別
- 型別轉換(int 和 String)型別
- C++ string型別常用操作C++型別
- 操作型別之字串型別字串
- jsp頁面number型別自動轉為String型別JS型別
- JavaScript String 字串JavaScript字串
- C++之string型別詳解C++型別
- 2、Redis的資料型別-stringRedis資料型別
- PHP基礎-資料型別-stringPHP資料型別
- TypeScript 字串字面量型別TypeScript字串型別
- 型別自定義格式字串型別字串
- JSON序列化時將BigDecimal型別轉換成String型別JSONDecimal型別
- Java-string字串Java字串
- JavaScript 字串(String) 大全JavaScript字串
- String字串,陣列字串陣列
- C# 字串(String)C#字串
- string型別資料的find函式型別函式
- Redis中String型別常用命令Redis型別
- 切片去重(string,int型別去重)型別
- String型別函式傳遞問題型別函式
- 資料型別之字串篇資料型別字串
- 基本資料型別之字串資料型別字串