[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends:00710] Re: Servlet でのデータベース接続の不具合について



nekopです。

At Tue, 08 Oct 2002 11:29:34 -0400,
Midori Aida wrote:

> StringBuffer.toString() ですが、確かに現在はそのまま新しい String 
> Objectをつくっているだけですが、APIにあるように、そうでなくてもいいは
> ずです。Spec上は インターフェースCharSequence に規定してあるように、
> 文字列が正しければ、どうやってもいいみたいですし、、、。

CharSequenceっていうのが導入されたのですね。知りませんでした。
今APIリファレンスを見てきたのですが、CharSequenceは文字シーケ
ンスへの読み込みメソッドを規定しているだけで、返されるString 
Objectについては何も規定されていないように見えます。

> 新しいObjectをメモリーにアロケートするよりは、 toString を使うべきと
> 言うのが私の個人的見解です。将来的に実装が変わらないとも限りませんしね。

新しいStringオブジェクトをメモリにアロケートしない、というこ
とは将来的にStringBuffer#toString()がconstants poolからString
を取得する実装となった場合のことを想定していらっしゃるので
しょうか。

Stringオブジェクトの生成コストについてですが、巨大な値を持つ
Stringオブジェクトの新規生成以外はそんなに気にする必要も無い
だろうと思いますし、巨大な値を持っていたとしても、現在の
StringBufferを受け取るStringのコンストラクタは値を保持する領
域をStringBufferオブジェクトと共有するので、生成のコストは気
にしなくてもよいと思います。


下記に、同じ話題の一連のスレッドがあります。
http://java-house.jp/ml/archive/j-h-b/012934.html

ちなみに私はnew String(StringBuffer)を使用しています。

これは元となるStringBufferオブジェクトが持つデータからString
オブジェクトを生成する、つまりStringBufferが持っている文字列
と生成される文字列がequalであることが明白です。

Object#toString()は『オブジェクトの文字列表現を返却する』のは
確かですが、上記スレッドにあるとおり、StringBufferが持つデータ
がそのまま返却されない可能性もあるような気がするので使用してい
ません。

例えばSwingコンポーネントのtoStringだと、コンポーネントのサイ
ズや状態などがtoStringメソッドで取得できます。StringBufferに
ついて考えてみると、現在のバッファサイズなどの情報が付加され
て返却されても別におかしくはありません。Object#toString()とい
うメソッドは、一般的にそのような目的に使われるものです。

# まぁこのtoStringによるStringBufferのStringへの変換はかなり
# 一般的に使われているので、恐らく変更されないとは思っていますが

-- 
//nekop nekop@xxxxxxxxxxxx

------------------------------------------------------------------------
       ★今なら登録するだけで現金50万円が当たる!?
  http://research.infoseek.co.jp/research/index.phtml/mail?svx=971122