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となる。