开始考虑不得不在我为Android创建的其中一个应用程序的过程中从int转换为String。我坐下来写了一个小实用程序类,我认为这会缓解由于像Integer.toString()等函数调用而看不到的潜伏变量的分配......
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();
}现在我只是好奇A)这是否是正确的方法来做这样的事情,B)这样的事情是否值得研究,因为每一步都会发生额外的数学问题?似乎反效果,但至少会限制GC运行正确?提前致谢!
[编辑]
它引起了我的注意,即StringBuilder.toString()将实际分配一个临时对象,这正是我试图避免的。任何其他方式来简单地从char []转换为String而无需分配?或者像下面说的那样,这对于String类是不可能的?