[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 2chのread.cgiへ]
Update time : 12/06 08:18 / Filesize : 160 KB / Number-of Response : 769
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

★★Java質問・相談スレッド132★★



1 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 20:02:41 ]
プログラミング言語Javaに関する質問スレです。
JavaScript, Ajaxの質問は、ここでは受け付けていません。
Web製作管理    ttp://pc11.2ch.net/hp/
Webプログラミング ttp://pc11.2ch.net/php/
をご利用下さい。

よくある質問
・「コマンドまたはファイル名が違います」
 「'javac' は、内部コマンドまたは外部コマンド、
 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」
 「Exception in thread "main" java.lang.NoClassDefFoundError: 」
 ttp://www.wikiroom.com/java/?path,classpath
・String に == は使うな。equals() を使え。
・「\12288 は不正な文字です。」
文字リテラル以外で全角スペースは使えません。半角スペースに。
・その他の質問→「APIのjavadoc見ろ」

前スレッド
【初心者】Java質問・相談スレッド131【歓迎】
ttp://pc12.2ch.net/test/read.cgi/tech/1250369910/
次スレは>>950あたりで。

過去ログ、関連スレッド、よくある質問とその回答など、
質問をする前に、貴方が見なければならないサイトについての情報は、
下のwikiのページにまとめてあります。
ttp://www.wikiroom.com/java/

752 名前:デフォルトの名無しさん mailto:sage [2009/09/15(火) 21:53:55 ]
そりゃループの中で毎回 str += s; してるからだろ
str += s; は str = new StringBuilder(str).append(s).toString(); みたいなことになるから無駄だらけ

753 名前:デフォルトの名無しさん mailto:sage [2009/09/15(火) 21:58:13 ]
>>752
つまりはnewしてるのがオーバーヘッドの要因ってこと?
じゃあ、>>746のような+をつなげたような書き方なら
str.append(str.group(1)).append(str.group(2)).....
な感じになって、あんまり変わらない?

754 名前:デフォルトの名無しさん mailto:sage [2009/09/15(火) 22:15:56 ]
>>753
途中で定数文字列の足し算が複数回続くとか無い限り、
変わらないと思っていい。

ただ、言語仕様上は別に+演算子は二つのStringオブジェクトの
内容をくっつけたStringオブジェクトを新規作成する、
とだけで別にStringBuilderを絶対に使う、とは書いてないんだよねえ。
java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.18.1.2

755 名前:デフォルトの名無しさん mailto:sage [2009/09/15(火) 22:20:32 ]
何回「+」でつなげるかってーのは(あまり)重要じゃない。
Stringのインスタンスが何回生まれるかってことが大事。

756 名前:デフォルトの名無しさん mailto:sage [2009/09/15(火) 22:26:07 ]
jadで確認してみた。
String tmp = "";
for (int i=0; i<100; i++) { tmp = tmp + i; }
すると、ループ内で毎回StringBuilderをtmpで作って、i入れて、toStringした
結果を、tmpに入れてる。
0 ldc <String ""> [16]
2 astore_1 [tmp]
3 iconst_0
4 istore_2 [i]
5 goto 30
8 new java.lang.StringBuilder [18]
11 dup
12 aload_1 [tmp]
13 invokestatic java.lang.String.valueOf(java.lang.Object) : java.lang.String [20]
16 invokespecial java.lang.StringBuilder(java.lang.String) [26]
19 iload_2 [i]
20 invokevirtual java.lang.StringBuilder.append(int) : java.lang.StringBuilder [29]
23 invokevirtual java.lang.StringBuilder.toString() : java.lang.String [33]
26 astore_1 [tmp]
27 iinc 2 1 [i]
30 iload_2 [i]
31 bipush 100
33 if_icmplt 8
最適化しないのね。

757 名前:デフォルトの名無しさん mailto:sage [2009/09/15(火) 22:30:39 ]
>>756
すばらしい
逆コンパイルすることで、わかりやすく解析できるな
やっぱnewの連発(インスタンス生成)が問題なんだな

758 名前:デフォルトの名無しさん mailto:sage [2009/09/15(火) 22:34:25 ]
このへんはコンパイラ依存

759 名前:デフォルトの名無しさん mailto:sage [2009/09/15(火) 22:35:38 ]
C++で作ったコンパイラはやっぱり安心できる

760 名前:デフォルトの名無しさん mailto:sage [2009/09/15(火) 22:52:08 ]
8 new java.lang.StringBuilder [18]

これ自体は10ナノ秒/一回程度のコストだから
文字列連結処理全体から見た場合の影響度はきわめて小さい


23 invokevirtual java.lang.StringBuilder.toString() : java.lang.String [33]

問題なのはこれが繰り返されること



761 名前:デフォルトの名無しさん mailto:sage [2009/09/15(火) 22:57:30 ]
>>760
なるほど、いっかいいっかい、Stringオブジェクトへ変換
(新規Stringオブジェクトを生成してる)がまずいのか

762 名前:デフォルトの名無しさん mailto:sage [2009/09/15(火) 23:44:21 ]
まずかどうかは状況次第
10回程度連結しようが普通のアプリじゃオーバヘッドにはならんよ

763 名前:デフォルトの名無しさん mailto:sage [2009/09/15(火) 23:48:01 ]
StringとStringBuilderの間で文字データを何度もやりとりしてるのが大きいんじゃないかなぁ
StringからStringBuilderへ文字データをコピー、StringBuilderからStringへ文字データをコピー・・・
文字列が長くなるほどつらい

764 名前:デフォルトの名無しさん mailto:sage [2009/09/16(水) 00:03:56 ]
java.nio.*が利用出来ない環境で、その実行環境でサポートされている
エンコーディング(ISO-2022-JPやEUC-JPなど)の一覧を取得する方法は
ありませんか?
具体的にはjava.nio.charset.Charset#availableCharsets()相当の情報を
取得する方法が知りたいです。


765 名前:デフォルトの名無しさん mailto:sage [2009/09/16(水) 01:33:02 ]
sunのjavacはコンパイル時の最適化はあんまりしない。
JITとかにまかせる方。

766 名前:デフォルトの名無しさん mailto:sage [2009/09/16(水) 02:15:59 ]
jadの入手先が見つかりません。

767 名前:デフォルトの名無しさん mailto:sage [2009/09/16(水) 02:32:48 ]
googleの一番上に出てくるけど?

768 名前:デフォルトの名無しさん mailto:sage [2009/09/16(水) 02:37:52 ]
ありがとう、見つかりました。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<160KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef