我阅读了JDK的源代码,并与代码的措辞相混淆。代码方法意味着返回指定数组内容的字符串表示形式。
例如:int [] a = {0,1,2,3,4,5,6,7,8,9};
返回:[1,2,3,4,5,6,7,8,9]
JDK版本
public static String toString(int[] a) {
if (a == null)
return "null";
int iMax = a.length - 1;
if (iMax == -1)
return "[]";
StringBuilder b = new StringBuilder();
b.append('[');
for (int i = 0; ; i++) {
b.append(a[i]);
if (i == iMax)
return b.append(']').toString();
b.append(", ");
}
}
我的问题:
1,为什么不把if条件放在for循环的外面
代码:
//the follow code efficiency may be better or not
for (int i = 0; i< iMax; i++) {
b.append(a[i]);
b.append(", ");
}
return b.append(a[iMax]).append(']').toString();
2,StringBuilder
append
方法,如果参数是括号,方法使用char参数而不是String,我深入append
方法,{{ 1}}方法似乎效率很高,但我不确定
由于
答案 0 :(得分:2)
我认为你的代码可以像这样进一步优化/重构:
public static String toString(int[] a) {
if (a == null)
return "null";
StringBuilder b = new StringBuilder("[");
int iMax = a.length - 1;
if (iMax == -1)
return b.append(']').toString();;
for (int i = 0; i < iMax; i++)
b.append(a[i]).append(", ");
return b.append(a[iMax]).append(']').toString();
}
答案 1 :(得分:0)
您的代码会将数字与<
(小于)进行比较,这些数字的效果永远不会超过等于比较(==
),而且可能会更差。因此,JDK版本经过了更加精心的优化和思考。
是的,在适用的地方使用primitve arg更有效。没有堆分配,没有指针derefs(避免可能的缓存未命中和页面错误)。
答案 2 :(得分:0)
你必须在“for”循环中写入“if”条件,导致“for”循环的结构是:
for(initialization, test condition, modifier expression)
eg: for(int i=0 ; i<10 ; i++)
如上例中的(int i = 0 ;; i ++)没有测试条件,它必须写在“for”循环中,否则它将继续迭代...。无限循环。
这里的方法public static String toString(int [] a)的返回类型为String,因此使用toString()更容易将其转换为字符串格式,现在如果它是“char”那么它是第一次转换为Wrapper对象“Character”,然后我们可以将toString()应用于它......它乏味......但可以做到......
答案 3 :(得分:-1)
1。)如果在循环之后放置if条件,它将在循环之前在字符串的末尾添加逗号。导致“[1,2,3,4,5,6,7,8,9,]”。注意9之后的最后一个逗号。这是完成工作的最简单方法。
2.。)当你不想在字符串池中放入很多字符串时,会使用StringBuilder。但诚实的答案是我不确定!