Javaの勉強(3) | namachuのプログラマ日記

Javaの勉強(3)

『String.equals( )』と『String==String』の違い二回目


(1)Javaの型には基本データ型と参照型の2種類がある。

基本データ型・・・・boolean、byte、short、int、long、char、float、double

参照型・・・・・・・・・クラス型、インタフェース型、配列型


まず、Stringは参照型(クラス型)である。


(2)Stringクラスでは==とequalsで違いがある。

== は同じStringオブジェクトを参照しているかどうか

equals は同じ文字列を保持しているかどうか


つまり、equalsはどのような文字列を保持しているのかを見るということ。

では、==はどういう意味なのか


String hoge = "test";

String fuga = "test";


この2つのコード、一見違うオブジェクトを生成してるように見える。

Stringは参照型変数なのだから、


hoge → Stringオブジェクト "test"

fuga  → Stringオブジェクト "test"


と、なるはず・・・(→は参照を表す)

しかし、ここで重要なのが次の項目


(3)同じ文字リテラルの場合にStringオブジェクトがどのように参照するか。


これである。

同じ文字リテラルの場合にはStringオブジェクトは1つしか生成されない。

そして、その1つのオブジェクトを参照するのである。


hoge → Stringオブジェクト "test"

fuga  →→↑


ということで、この場合hogeとfugaは同じオブジェクトを参照していることになる。

つまりhoge==fugaはtrueとなる。


一方、String piyo = new String("test");

はnewを使って新しくオブジェクトを生成している。

だからhoge、fugaとは別物のオブジェクトとなる。

つまりfuga==piyoはfalseとなる。