Blog -

カテゴリ : 
Android » Tips
執筆 : 
NickQ 2011-11-10 13:52

文字列の操作、連結でとてもスピードの速いStringBuilderですが

私がハマったところ(ただのおっちょこちょいですが)の原因と注意を記事にします。

StringBuilderをメンバーで持って使いまわす場合に初期化の方法として、setLength(0)を使います

こうする事で、初期化と同じ行為(ポインタを初期化)する事が出来ます。

 

	private StringBuilder mStringBuilder = new StringBuilder();

	//初期化
	mStringBuilder.setLength(0);

 

これを分岐に使用してifで比較します。

 

	private StringBuilder mStringBuilder = new StringBuilder();

	//初期化
	mStringBuilder.setLength(0);

    	int ret = 0;
	//1-3の乱数
    	ret = (int)Math.floor(Math.random()*(3+1-1))+1;

   	switch(ret){
    	case 1:
		mStringBuilder.append("A");
        	break;
    	case 2:
		mStringBuilder.append("BB");
        	break;
    	case 3:
		mStringBuilder.append("CCC");
        	break;
       	default:
		mStringBuilder.append("A");
        	break;
    	}

	if(mStringBuilder.equals("A")){
		Log.d(TAG,mStringBuilder.toString);
	}

 

これを、何度か繰り返します。

A → BB → CCC → A と発生した場合最後のAではFALSEとして評価されます。

これは何故かというと、mStringBuilderはポインタをリセットしましたが中身のメモリがクリア

された訳では無いからです。

実際、最後のif分の評価は、ACC == A を評価していることになります。

 

	if(mStringBuilder.toString().equals("A")){
		Log.d(TAG,mStringBuilder.toString);
	}

 

この様に比較すると想定通り評価出来ます。

これにハマって余分にデバッグしてしまった^^;

 

  • コメント (0)
  • トラックバック (0)
  • 閲覧 (10380)

トラックバック

トラックバックpingアドレス http://three-thread.sakura.ne.jp/tt/modules/d3blog/tb.php/32

コメントの投稿

コメント投稿に関するルール : 登録ユーザ以外のコメントは承認が必要
最新のコメント
  • NickQ(2012/11/19)
  • ゲスト(2012/11/19)
最新のトラックバック
メインメニュー

ログイン
ユーザー名:

パスワード:


SSL パスワード紛失


カテゴリ一覧

アーカイブ

Books