は、Android用に作成しているアプリのうち、intからStringに繰り返し変換する必要があると考えました。私は座って、私は今、私はあなたが原因関数が持つInteger.toString()、およびなどのようなコールを見ることができない変数を潜んでいるの割り当てを緩和するだろうと思う小さなユーティリティクラス...Android/Javaをint型からString型への変換なしで変換しますか?
private int[] iMods = {
1,
10,
100,
1000,
10000,
100000,
1000000,
10000000,
100000000,
1000000000};
private int tmpInt = 0;
private int MAX_DIGITS = 6;
private char[] cScoreDigit = new char[MAX_DIGITS];
private int[] iScoreDigit = new int[MAX_DIGITS];
private StringBuilder mScoreStringBuilder = new StringBuilder("000000");
public String intToString(final int pInt, final int pMAX_DIGITS){
MAX_DIGITS = pMAX_DIGITS;
for (tmpInt = 1; tmpInt <= MAX_DIGITS; tmpInt++){ // Set each cScoreDigit to proper equivalent of iScoreDigit without cast!
switch ((pInt % iMods[tmpInt])/iMods[tmpInt - 1]){
case 0:
cScoreDigit[MAX_DIGITS - tmpInt] = '0';
break;
case 1:
cScoreDigit[MAX_DIGITS - tmpInt] = '1';
break;
case 2:
cScoreDigit[MAX_DIGITS - tmpInt] = '2';
break;
case 3:
cScoreDigit[MAX_DIGITS - tmpInt] = '3';
break;
case 4:
cScoreDigit[MAX_DIGITS - tmpInt] = '4';
break;
case 5:
cScoreDigit[MAX_DIGITS - tmpInt] = '5';
break;
case 6:
cScoreDigit[MAX_DIGITS - tmpInt] = '6';
break;
case 7:
cScoreDigit[MAX_DIGITS - tmpInt] = '7';
break;
case 8:
cScoreDigit[MAX_DIGITS - tmpInt] = '8';
break;
case 9:
cScoreDigit[MAX_DIGITS - tmpInt] = '9';
}
}
// Delete all 0's
mScoreStringBuilder.delete(0, mScoreStringBuilder.length());
return mScoreStringBuilder.append(cScoreDigit).toString();
}
を書きましたこれは実際にこのようなことを行う正しい方法であるかどうか、そしてB)各ステップで余分な数学が行われるため、このようなものを検討する価値があるのかどうか、A)については興味がありますか?カウンタの生産性は見えますが、GCが正しく動作するのを少なくとも抑制しますか?前もって感謝します!
[EDIT]
それは私の注意に持って来られていますStringBuilder.toStringは()実際に私は避けるようにしようとしていたものですされ、一時的なオブジェクトを割り当てるようにします。割り当てを持たずに単にchar []をStringに変換する他の方法はありますか?または、以下のように、これはStringクラスでは不可能ですか?
intから直接 'char'値を計算できるので、スイッチ/ケースをリファクタリングすることができます。 *ヒント* - '' 0 ''のASCII値を調べる –
それがもっと速いかどうか分かりませんか?または、文字の値(数値)を実際の整数桁から外した量だけ操作すると言っていますか?それはうまくいくようですね!しかし、以下に述べるように、これはまだ.toString()を使用しているため、割り当てたい.....ではなく、自分自身と対戦します。 –