String
在Java中,String
是一個引用類型,它本身也是一個class
。但是,Java編譯器對String
有特殊處理,即可以直接用"..."
來表示一個字符串:
String s1 = "Hello!";
實際上字符串在String
內部是通過一個char[]
數組表示的,因此,按下面的寫法也是可以的:
String s2 = new String(new char[] {'H', 'e', 'l', 'l', 'o', '!'});
因爲String
太常用了,所以Java提供了"..."
這種字符串字面量表示方法。
Java字符串的一個重要特點就是字符串不可變。這種不可變性是通過內部的private final char[]
字段,以及沒有任何修改char[]
的方法實現的。
我們來看一個例子:
public class Main {
public static void main(String[] args) {
String s = "Hello";
System.out.println(s);
s = s.toUpperCase();
System.out.println(s);
}
}
結果:
Hello
HELLO
字符串比較
當我們想要比較兩個字符串是否相同時,要特別注意,我們實際上是想比較字符串的內容是否相同。必須使用equals()
方法而不能用==
。
我們看下面的例子
public class Main {
public static void main(String[] args) {
String s1 = "hello";
String s2 = "hello";
System.out.println(s1 == s2);
System.out.println(s1.equals(s2));
}
}
從表面上看,兩個字符串用==
和equals()
比較都爲true
,但實際上那只是Java編譯器在編譯期,會自動把所有相同的字符串當作一個對象放入常量池,自然s1
和s2
的引用就是相同的。
所以,這種==
比較返回true
純屬巧合。換一種寫法,==
比較就會失敗:
public class Main {
public static void main(String[] args) {
String s1 = "hello";
String s2 = "HELLO".toLowerCase();
System.out.println(s1 == s2);
System.out.println(s1.equals(s2));
}
}
結果:
false
true
結論:兩個字符串比較,必須總是使用
equals()
方法。要忽略大小寫比較,使用
equalsIgnoreCase()
方法。
參考:https://www.liaoxuefeng.com/wiki/1252599548343744/1260469698963456
更多點擊上方連接查看。