JAvaにおけるStringオブジェクトの==とequalsメソッド
まずコードを見てみましょう.
まず、Stringは8の基本データ型ではなく、参照データ型であることを明確にしなければならない.Stringオブジェクトを作成するには、次の2つの方法があります.
1. String s = "abc";この賦値は実は3つのステップに分かれている.
Step 1:文字列プールでabcの値を持つオブジェクトがあるかどうかを探します.ここで定数プールの概念があります.定数プールとは、コンパイル中に決定され、コンパイルされた.classファイルに保存されたインタフェース、クラスの定数、文字列定数、すなわち文字列プールを含むデータの一部です.
Step 2:あれば,その像への参照をsに割り当てるので,ここでのs 2とs 1は同じオブジェクトを指す.
Step 3:ない場合はabcの値を持つオブジェクトを作成し、そのオブジェクトの参照をプールに存在させ、sに割り当てます.
ここでのs 1とs 2はいずれも文字列定数であり、それらはコンパイル中に決定されるので、s 1=s 2はtrueであり、s 7は2つの文字列定数の和であるため、文字列定数でもあるため、s 5=s 7の結果もtrueである.
2. String s = new String("abc");この付与方式は文字列プールとは関係なく,毎回構築方法の新規オブジェクトを呼び出す.したがってs 3,s 4は==で比較するとfalseとなり,文字列中のequalsは文字列の内容が等しいか否かを比較するのでs 3.equals(s 4)はtrueとなる.
一般に,基本データ型比較には==を用い,参照データ型比較にはequalsを用いる.
- package com.anjoyo.test;
-
- public class TestString {
- public static void main(String[] args) {
- String s1="abc";
- String s2="abc";
- String s3=new String("abc");
- String s4=new String("abc");
- String s5="abcd";
- String s6=s1+"d";
- String s7="abc"+"d";
- System.out.println(s1==s2); //true
- System.out.println(s1.equals(s2));//true
- System.out.println(s3==s4);//false
- System.out.println(s3.equals(s4));//true
- System.out.println(s5==s6);//false
- System.out.println(s5==s7);//true
- }
- }
まず、Stringは8の基本データ型ではなく、参照データ型であることを明確にしなければならない.Stringオブジェクトを作成するには、次の2つの方法があります.
1. String s = "abc";この賦値は実は3つのステップに分かれている.
Step 1:文字列プールでabcの値を持つオブジェクトがあるかどうかを探します.ここで定数プールの概念があります.定数プールとは、コンパイル中に決定され、コンパイルされた.classファイルに保存されたインタフェース、クラスの定数、文字列定数、すなわち文字列プールを含むデータの一部です.
Step 2:あれば,その像への参照をsに割り当てるので,ここでのs 2とs 1は同じオブジェクトを指す.
Step 3:ない場合はabcの値を持つオブジェクトを作成し、そのオブジェクトの参照をプールに存在させ、sに割り当てます.
ここでのs 1とs 2はいずれも文字列定数であり、それらはコンパイル中に決定されるので、s 1=s 2はtrueであり、s 7は2つの文字列定数の和であるため、文字列定数でもあるため、s 5=s 7の結果もtrueである.
2. String s = new String("abc");この付与方式は文字列プールとは関係なく,毎回構築方法の新規オブジェクトを呼び出す.したがってs 3,s 4は==で比較するとfalseとなり,文字列中のequalsは文字列の内容が等しいか否かを比較するのでs 3.equals(s 4)はtrueとなる.
一般に,基本データ型比較には==を用い,参照データ型比較にはequalsを用いる.