- - PR -
文字列の比較
| 投稿者 | 投稿内容 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2003-05-15 09:41
お疲れ様です。てんきゅうです。
皆さん、ありがとうございました。 皆さんの意見が聞けてとてもよかったです。 私的には(かなり好みで決めました) if( string == null || string.length() <= 0 ) { が良いかと思いましたので 以後、これで行きたいと思います。 ありがとうございました。 | ||||||||
|
投稿日時: 2003-07-24 19:24
カメレスですみませんが、
なぜ、この記述で怒りだすのですか? | ||||||||
|
投稿日時: 2003-07-24 19:48
zaxx_MDさんではありませんが、
これは、
こんなコードを実行してみればわかると思いますよ。 もっとも、 String string = new String(""); の時点で怒り出しかねないですが…。 | ||||||||
|
投稿日時: 2003-07-25 09:31
こんにちわ。 僕は細かい実行効率などはあまり意識していなかったのですが このコメントを見付けてちょっと実験してみました。 Stringの初期化について以下の3つのパターンがあると思います。 A.String str = ""; B.String str = new String(); C.String str = new String(""); 上記3パターンについて以下の処理を行いました
処理性能結果は A > C > B となりました。 僕は結構頻繁に String str = new String(); というコードを使用していたため、ちょっとびっくりしているんですが。 でもなぜ BよりCの方が早いかはいまいちわかりません。 そもそも僕のテストコードがおかしいのか・・。 | ||||||||
|
投稿日時: 2003-07-25 13:59
こんにちは、stocです。
jdk1.4.2のString.javaソースを私なりに確認したんですが、 B.String str = new String(); は、内部のchar型配列を毎回newしているようです。 C.String str = new String(""); の方は、サイズが同じなのでデータをコピーしているようです。 ただ、AとCの差は、僕も驚きました。 [ メッセージ編集済み 編集者: stoc 編集日時 2003-07-25 14:01 ] [ メッセージ編集済み 編集者: stoc 編集日時 2003-07-25 14:03 ] | ||||||||
|
投稿日時: 2003-07-25 18:58
こんにちはWataです。
BとCはどっちも余分なオブジェクトが1個作られること意外、Aと実質的な違いは何もありません。 よく String str = new String("abc" + "efg"); みたいなコードを書く人がいますが、まったくの無駄です。 こんなのも積もり積もればGC頻発の原因になるので注意した方がいいですよ。 String(String original)のコンストラクタはdeprecatedにして欲しいです。 | ||||||||
|
投稿日時: 2003-07-25 20:00
>System.out.println( "test1 : " + sample.test1() );
>System.out.println( "test2 : " + sample.test2() ); >System.out.println( "test3 : " + sample.test3() ); 順番は入れ換えてみましたか? このままだと先にやるほうが不利になるのでは. | ||||||||
|
投稿日時: 2003-07-26 09:19
あの〜、なんか論点がずれていっていませんか?
LEDさんが言いたいのは、こういうケースだと思います。 String empty = new String(""); if (empty == "") { System.out.println("Empty"); } else { System.out.println("Not empty"); } Stringを==で比較するには、「一般には」間違いです。 | ||||||||
