MENU

【Java Silver】文字列操作のテクニックと知識

文字列操作について学ぶ重要な問題です。

問題

次のJavaプログラムを実行したときの出力を選びましょう。

            
                public class StringExample {
                    public static void main(String[] args) {
                        String str1 = "Hello";
                        String str2 = new String("Hello");
                        System.out.println(str1 == str2 ? "Same" : "Different");
                        System.out.println(str1.equals(str2) ? "Equal" : "Not Equal");
                    }
                }
            
        

選択肢

  • A. Same, Equal
  • B. Same, Not Equal
  • C. Different, Equal
  • D. Different, Not Equal

答えと解説

回答を見る

答え

C. Different, Equal

解説

基本説明:

Javaの文字列比較に関する基礎を理解しておくことは重要です。 ==演算子は、オブジェクトの参照を比較します。 一方、equals()メソッドは文字列の内容そのものを比較します。 これらの違いを知らないと、予想と異なる結果が出ることがあります。

誤答理由:

多くの人が、==equals()が同じ機能だと思いがちです。 しかし、前述の通り==は参照の比較であり、equals()は実際の値の比較です。 この違いを理解しないと、選択肢AやBのように誤った解答を選んでしまうことがあります。

つまずきポイント:

初心者がつまずくポイントとして、newキーワードを用いた文字列の作成と リテラルとして作成した文字列の違いが挙げられます。 リテラルは、Java VMが文字列プールを利用して効率を上げますが、 newキーワードを使用すると、常に新しいオブジェクトが生成されます。

発展知識:

intern()メソッドを利用することで、文字列のプールにある等価な文字列を取得することができます。 一般的には文字列リテラルに.intern()を呼び出すと、 既存のプール内の文字列を再利用します。 これにより、==での比較もtrueとなるケースを実現できます。 文字列操作の最適化に役立つ知識です。

目次