Javaコアクラス-文字列


String
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つのオブジェクトとして定数プールに自動的に入れるだけで、自然s1s2の参照は同じである.
したがって、このような==比較は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
上のリンクをクリックして表示します.