println(obj)と+演算

以前の日記でprintln(obj)をするとobj.toStringの結果が出るということを書きましたけど、今日はその延長。

println(obj)をすると中でごにょごにょする訳だけど、

println(obj + String)をするとobj + Stringが新しいStringとなってprintされる。

今日はその+の部分を友人の指導のもと見てみました。

eclipseだとStringクラスの中も逆コンパイルして見せてくれる。

じゃあ+の中も見れる!?と思ったけどそれは言語仕様みたい。

http://www.y-adagio.com/public/standards/tr_javalang/index.htm

最新かどうか、そもそも正しいか分からないけど日本語訳ありがてえ!

早速加減演算の項をチェック。
文字列連結の最適化 処理系は中間的なオブジェクトStringの作成及び廃棄を避けるために,変換及び連結を一段階で実行してもよい。Javaコンパイラは,繰り返される文字列連結の性能向上を目的として,式の評価によって作成される中間的なオブジェクト Stringの数を減らすために,クラス StringBuffer(20.13) 又は同様な技術を使用してもよい。

ふむふむ。

まあ実際のところよくわかってないけど、少なくともtoStringの中で新しく文字列作成してるときはこうしてる

[java]
public String toString()
{  
  return (new StringBuilder()).append(getClass().getName()).append("@").append(Integer.toHexString(hashCode())).toString();
}
[/java]

ちなみに友人曰くこれは逆コンパイル結果であって実際のコードはおそらくこうらしい。

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

ふむ、なるほど。+はStringBuilderとappendになるのかな。

というわけでまた少しだけ詳しくなりました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です