Javaコアクラス-文字列
String
Javaでは、
実際には文字列は
Java文字列の重要な特徴の一つは、文字列が可変ではないことです.この不変性は、内部の
例を見てみましょう
結果:
文字列の比較
2つの文字列が同じかどうかを比較したい場合は、実際に文字列の内容が同じかどうかを比較したいことに特に注意してください.
次の例を見てみましょう
表面的には、2つの文字列を
したがって、このような
結果:
結論:2つの文字列を比較するには、
大文字と小文字の比較を無視するには、
参照先:https://www.liaoxuefeng.com/wiki/1252599548343744/1260469698963456
上のリンクをクリックして表示します.
Javaでは、
String
は参照タイプであり、それ自体もclass
である.ただし、JavaコンパイラはString
に対して特別な処理を行います.つまり、"..."
で文字列を直接表すことができます.String s1 = "Hello!";
実際には文字列は
String
の内部に1つの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
文字列の比較
2つの文字列が同じかどうかを比較したい場合は、実際に文字列の内容が同じかどうかを比較したいことに特に注意してください.
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));
}
}
表面的には、2つの文字列を
==
とequals()
で比較してもtrue
であるが、実際にはJavaコンパイラがコンパイル期間中に、同じ文字列をすべて1つのオブジェクトとして定数プールに自動的に入れるだけで、自然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
結論:2つの文字列を比較するには、
equals()
メソッドを常に使用する必要があります.大文字と小文字の比較を無視するには、
equalsIgnoreCase()
メソッドを使用します.参照先:https://www.liaoxuefeng.com/wiki/1252599548343744/1260469698963456
上のリンクをクリックして表示します.