Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ Javaにおける文字列の比較 | 文字列
Java入門

Javaにおける文字列の比較

メニューを表示するにはスワイプしてください

比較は、Javaが予想以上に「低レベル」な動作を始める部分です。文字列も数値と同じように == を使って比較できるのが当然のように感じられます。結局のところ、2つの文字列が見た目で同じなら、等しいはずだと思うのは自然です。

== の問題点

文字列リテラルで == を使うと、最初は正しく動作しているように見えます。

Main.java

Main.java

1234567891011
package com.example; public class Main { public static void main(String[] args) { String order1 = "Latte"; String order2 = "Latte"; System.out.println(order1 == order2); } }

両方の変数はJavaの内部の文字列プール内の同じオブジェクトを指しています。同じリテラルが再び現れると、Javaは既存のものを再利用します。そのため、==trueを返します。

しかし、次に文字列の生成方法を少し変更してみましょう:

Main.java

Main.java

1234567891011
package com.example; public class Main { public static void main(String[] args) { String order1 = new String("Latte"); String order2 = new String("Latte"); System.out.println(order1 == order2); } }

new String()を使用すると、Javaは内容が同じであっても毎回完全に別のオブジェクトを作成します。==メモリアドレスを比較し、テキスト自体ではないため、falseを返します。

重要なルール:==は文字列内部のテキストを見ず、両方の変数がメモリ上のまったく同じオブジェクトを指しているかどうかを確認します。

equals() — 実際の内容の比較

2つの文字列の中身(テキスト)を比較したい場合は、.equals() を使用。メモリ上の位置は無視し、文字だけに注目して比較する方法:

Main.java

Main.java

1234567891011
package com.example; public class Main { public static void main(String[] args) { String order1 = new String("Latte"); String order2 = new String("Latte"); System.out.println(order1.equals(order2)); } }

order1order2 はメモリ上では別々のオブジェクトですが、.equals() は内容を比較し、true を返す。

equals() における大文字・小文字の区別

Javaは大文字・小文字を区別するため、1文字でも大文字・小文字が異なると文字列は等しくなりません。

Main.java

Main.java

1234567891011
package com.example; public class Main { public static void main(String[] args) { String order1 = "Latte"; String order2 = "latte"; System.out.println(order1.equals(order2)); } }

"Latte""latte" は異なる文字列として扱われるため、結果は false となります。

equalsIgnoreCase() — 大文字と小文字を区別しない比較

大文字・小文字の違いを無視して文字列を比較したい場合は、.equalsIgnoreCase() を使用。

Main.java

Main.java

12345678910
package com.example; public class Main { public static void main(String[] args) { String order = "Latte"; System.out.println(order.equalsIgnoreCase("LATTE")); } }

.equalsIgnoreCase()"Latte""LATTE" を同一とみなし、true を返す。

question mark

Javaで文字列に == を使用した場合、何を比較しますか?

正しい答えを選んでください

すべて明確でしたか?

どのように改善できますか?

フィードバックありがとうございます!

セクション 4.  5

AIに質問する

expand

AIに質問する

ChatGPT

何でも質問するか、提案された質問の1つを試してチャットを始めてください

セクション 4.  5
some-alt