不変性を選ぶ

前回の続き

分からない時は javadoc を見てみる。

文字列は定数です。この値を作成したあとに変更はできません。文字列バッファは可変文字列をサポートします。文字列オブジェクトは不変であるため、共用することができます。

不変 - Effective Java の項目13を見てみよう。
Effective Java p.61 項目13 不変性を選ぶ
更に分からなくなってくる。というかあんまり関係無かった…。

たとえば BigInteger クラスは、内部的には「符号 - 大きさ」表現を使用しています。

すると"String クラスは、内部的には「char 型の配列 - 長さ」表現を使用しています"?
String クラスを見てみるとそれっぽい感じになってますね。それっぽいという事にしておきましょう。


char[] str = {'a','b','c'};
System.out.println(str1.equals(str));

false が返ってくるのは基本データ型と参照型を比較してるから。


String str1 = "abc";

StringBuffer sb = new StringBuffer();
sb.append("a");
sb.append("b");
sb.append("c");

System.out.println(sb.toString().equals(str1));

上のコードでは true が返る。


String string = new String(str);
System.out.println(str.toString());
System.out.println(string.toString());

str.toString() はメモリのアドレスを返す。string.toString() は値。


public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

toString() メソッド - Object クラス
Effective Java p.40 項目9 toString を常にオーバーライドする

(略)その文字列は、クラス名、「アットマーク(@)」、ハッシュコードの符号なし16進数表現から構成されており、(後略)

次回は「ハッシュコードとナポリタンの謎を追え!」です。お楽しみに。