• ベストアンサー

二つの違い

いつも参考にさせて頂いています。 初歩的な質問ですが宜しくお願いします。 例えばStringBufferクラスを使用するとします。 1. StringBuffer buf = new StingBuffer(); 2. StringBUffer buf = null; buf = new StringBUffer(); 上記コード2つの違いって何かありますでしょうか? もしあるとすればどういうときに使い分けるのでしょうか? 先日他の方のソースを見ていたら発見したので気になって質問してみました。どうか宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Tasuke22
  • ベストアンサー率33% (1799/5383)
回答No.3

>>2.の2行目を使う案件は有得ると思います。 >とのことですが、具体的にどういうときに使い分けるものなのでしょうか? 汎用的な関数を書いている時におきやすいですね。 つまり、bufがnullでもnew StingBuffer()されていても受け付ける ような関数です。 使い分けるというよりは、必要に迫られる訳です。 色々な要求がありますから、色々な手法を知っておくのは、設計に 余裕が出ます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.2

Java 超初心者なのですが。 1. だと new StringBuilder() が例外を投げたときに buf の内容が不定になるのでわざわざ 2. では null で初期化しているような気がします。 もっとも例外が投げられるような状況で buf の内容を参照する意味はほとんどないと思いますが。 また StringBuilder のコンストラクタが例外を投げるかどうかも確認してません。

全文を見る
すると、全ての回答が全文表示されます。
  • Tasuke22
  • ベストアンサー率33% (1799/5383)
回答No.1

前後関係が無く、単純に書かれた通りであれば、 2.の方が効率が悪い、だけですね。 2.の2行目を使う案件は有得ると思います。

pgBeginImo
質問者

お礼

早速の回答ありがとうございます。 >2.の2行目を使う案件は有得ると思います。 とのことですが、具体的にどういうときに使い分けるものなのでしょうか? 質問に質問を重ねてすいませんが宜しくお願いします

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • jspのプログラムについて

    jspファイルで データベースの中のテーブルの中身をCSVファイルに出力するプログラムを教えてください。 delete文で中身を消すプログラムは書けたのですが、これはできません。 conn = null; st=null; conn=DriverManager.getConnection("jdbc:mysql://localhost/データベース名?" + "user=ユーザー名&password=パスワード&useUnicode=true&characterEncoding=utf8"); st=conn.createStatement(); StringBuffer buf = new StringBuffer(); buf.append("delete from where id="+id); st.executeUpdate(buf.toString()); これで削除はできました。 なのでbuf.appendの中身を buf.append("SELECT from テーブル名 INTO OUTFILE "c:/data" "); これに書き換えればできると思ったのですができません。 よろしくお願いします。

    • ベストアンサー
    • Java
  • Zipファイル解凍処理について

    こんにちわ。 Javaの解凍処理について質問です。 Test.zipがあって、その中身が「テスト.xls」とした時、うまく解凍ができません。 Zipファイルの中身が日本語名ではなく、「Test.xls」であれば正常に解凍ができます。 下記の書き方では日本語名のファイルの入ったZipファイルを解凍することはできないのでしょうか? どなたかご教授お願い致します。 String fname = null; FileInputStream fis = null; BufferedInputStream bis = null; ZipInputStream zis = null; ZipEntry zent = null; FileOutputStream fos = null; try { fis = new FileInputStream(FilePath); bis = new BufferedInputStream(fis); zis = new ZipInputStream(bis); byte[] buf = new byte[1024]; int len; // アーカイブ中に含まれるファイル情報の取得 while ((zent = zis.getNextEntry()) != null) { int intResult = zent.toString().indexOf("."); int intLength = zent.toString().length(); //ファイル名の変更(フォルダ名+社員コード)StringBuffer BuffRename = new StringBuffer(); BuffRename.append("D:\\test\\"); BuffRename.append(zent.getName().substring(0,intResult)); BuffRename.append(SyainCd); BuffRename.append(zent.getName().substring(intResult,intLength)); fname = BuffRename.toString(); //書き込みファイルをオープン fos = new FileOutputStream(fname); while (-1 != (len = zis.read(buf, 0, buf.length))) { fos.write(buf, 0, len); } //★★★ fos.close(); } Catch・finallyは省略

  • JSPファイルの書き出し

    いつもお世話になっています。 ただ今とあるJSPファイルを呼ぶと他のJSPファイルを作成するものを作成中です。 ファイルに書き出す内容をプログラム上でStringBufferに格納しているのですが、コンパイルエラーが発生してしまっています。 StringBuffer buf = new StringBuffer(""); buf.append("if(Arrays.binarySearch(myGroup,path)){"); buf.append("\n %>\n"); この部分でエラーが発生してしまいます。 エラーの内容は 文字列が行の最後で終了していません。 buf.append("\n       ^ となっています。 何が原因なのでしょうか? どなたかご教授お願い致します。

    • ベストアンサー
    • Java
  • C言語に関する質問

    初めて質問させて頂きます。C言語初心者です。 実は講義で「ファイル中の英文を単語に分けてその出現頻度をカウントするコードを木構造を用いて出力せよ」という課題が出ました。 そこで、参考にするコードを検索しましたところ、以下のURLにあるベストアンサーのコードが近いと感じました。 http://okwave.jp/qa/q4155655.html コードの内容は以下の通りになります。 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> typedef struct node Node; struct node{ char *word; int count; Node *left,*right; }; Node *root=NULL; void compose(FILE *fp); void inorder(Node *p); void strlower(char *s); int main(int argc, char *argv[]) { FILE *fp; Node *new; fp=fopen(argv[1],"r"); if(fp==NULL){puts("ファイルを開けません");return(-1);} compose(fp); inorder(root); return (0); } void strlower(char *s){ while(*s!=NULL){*s=tolower(*s);s++;} } void compose(FILE*fp){ Node **p,*new; char buf[256]; while(1){ fscanf(fp,"%[^a-zA-Z0-9]",buf); if(fscanf(fp,"%[a-zA-Z0-9]",buf)==EOF)break; strlower(buf); if(root==NULL){ new=(Node *)malloc(sizeof(Node)); new->left=NULL; new->right=NULL; new->word=strdup(buf); new->count=1; root=new; }else{ *p=root; while(1){ if(strcmp(buf,(*p)->word)==0){ (*p)->count++;break; }else if(strcmp(buf,(*p)->word)<0){ if((*p)->left==NULL){ new=(Node *)malloc(sizeof(Node)); new->left=NULL;new->right=NULL;new->word=strdup(buf);new->count=1; (*p)->left=new; break; }else{ *p=(*p)->left; } }else{ if((*p)->right==NULL){ new=(Node *)malloc(sizeof(Node)); new->left=NULL; new->right=NULL; new->word=strdup(buf); new->count=1; (*p)->right=new; break; }else{ *p=(*p)->right; } } } } } } void inorder(Node*p){ if (p==NULL) return; inorder(p->left); printf("%s %d\n",p->word, p->count); inorder(p->right); } しかし、これをそのままコンパイル・実行すると、コンパイル時に以下の注意が出ます。 warning comparison between pointer and integer ('int' and 'char *') while(*s!=NULL){*s=tolower(*s);s++;} 上記の注意を無視してそのまま実行すると、segmatation faultが出てしまいますorz おそらく、sの型が*s=s[]なので、注意の中の「s++」の部分で誤作動を起こしている(s++を実行するにはsはint型でなければならない)と思うのですが、どうコード文を変えれば良いのかがよくわかりません。 どなたかお教え頂けると幸いです。どうぞよろしくお願いしますm(_ _)m

  • for文とStringBuffer

    javaのfor文の使い方 質問者:asutarisuk コマンドライン引数で入力した文字が3文字以下ならその文字列を20個文字連結して表示し、4文字以上ならたくさんと表示したいのですが表示できません。 import java.io.*; public class ABC { public static void main(String args[])throws IOException{ BufferedReader myReader = new BufferedReader( new InputStreamReader(System.in), 1 ); String str = myReader,readLine(); if(str.length() >= 4){ System.out.println("たくさん"); } StringBuffer buf = new StringBuffer(str.length()*20); for(int i = 0;i < 20; i++){ buf.append(str); System.out.println(buf); } } } としたら、たくさんと表示されません。どこを修正すればいいでしょうか?ちなみにfor文とStringBufferクラスを用いてというのが条件です。

    • ベストアンサー
    • Java
  • javaのfor文の使い方

    コマンドライン引数で入力した文字が3文字以下ならその文字列を20個文字連結して表示し、4文字以上ならたくさんと表示したいのですが表示できません。 import java.io.*; public class ABC { public static void main(String args[])throws IOException{ BufferedReader myReader = new BufferedReader( new InputStreamReader(System.in), 1 ); String str = myReader,readLine(); if(str.length() >= 4){ System.out.println("たくさん"); } StringBuffer buf = new StringBuffer(str.length()*20); for(int i = 0;i < 20; i++){ buf.append(str); System.out.println(buf); } } } としたら、たくさんと表示されません。どこを修正すればいいでしょうか?ちなみにfor文とStringBufferクラスを用いてというのが条件です。

  • とても初歩的な質問

    ほっんとに初歩的な質問で申し訳ないのですが StringBuffer s1 = new StringBuffer("Java"); StringBuffer s2 = new StringBuffer("HTML"); S1とS2が次のように与えられていて、s1.delete(1,3)という操作をしたときに何故答えが「Ja」になるらしんですが何故そうなるのですか? 1番目と3番目を消したら「Jv」になるのではないんですか? 大学の授業をまったく聞いていなかったのでわかりません。どなたか解説お願いします。

  • サーブレットでデータベース操作。

    サーブレットを使ってMySQL内のテーブルにレコードを追加、変更、削除できるようなプログラムを作っています。流れとしましては『HTML画面→サーブレット起動→レコード追加、変更、削除』といった具合です。追加、変更ができてなぜか削除だけできません。SQL文を書き換えるだけのはずなのですが・・。どなたか教えて下さい。windows2000Professional, j2sdk1.4.0_01, Tomcat3.3.1,MySQL3.23.47 略 . . Connection con = null; Statement stmt = null; try { con = DriverManager.getConnection( "jdbc:mysql://localhost/db_ichat", "root", "pen3"); stmt = con.createStatement(); String seqno = request.getParameter("seqno"); String name = request.getParameter("name"); String namejp = new String(name.getBytes("8859_1"), "JISAutoDetect"); String psw = request.getParameter("psw"); String pswjp = new String(psw.getBytes("8859_1"), "JISAutoDetect"); String email = request.getParameter("email"); StringBuffer buf = new StringBuffer(); buf.append("delete from t_id "); buf.append("where seqno = "); buf.append(seqno); stmt.executeUpdate(buf.toString()); try { stmt.close(); } catch (Exception e) {} try { con.close(); } catch (Exception e) {} . . 略。

    • ベストアンサー
    • Java
  • エラーの意味を

    こんにちは。 いろいろと調べてみたんですが、どうにもわからなくて・・・。 Eclipseなんですが、 あるクラス(下記のようなクラス) public String test( MAp map ){ StringBuffer sb = new StringBuffer(); sb.append("~いろいろ~"); ~中略(これがたくさん・・・)。~ return sb.toString(); } で、エラーメッセージ メソッド test(java.util.Map) のコードが 65535 バイトの制限を超えています。 が出ます。 エラー個所はメソッドの宣言部 test( MAp map ) になっています。 StringBufferに65535バイトしか入らない・・・、という事はないですし、 何が原因なのかサッパリです・・・。 よろしくお願いします。

    • ベストアンサー
    • Java
  • java extends new

    (javaにて)extends してクラスの継承を行った場合と、newして新しく作り出した場合と何が違うのでしょうか? ソースコード的にはextends したほうが文字数が少なくて済みますが、他の違いを思いつきません。