我对代码的措辞感到困惑

时间:2012-05-17 09:18:30

标签: java

我阅读了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}}方法似乎效率很高,但我不确定

由于

4 个答案:

答案 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)

  1. 您的代码会将数字与<(小于)进行比较,这些数字的效果永远不会超过等于比较(==),而且可能会更差。因此,JDK版本经过了更加精心的优化和思考。

  2. 是的,在适用的地方使用primitve arg更有效。没有堆分配,没有指针derefs(避免可能的缓存未命中和页面错误)。

答案 2 :(得分:0)

  1. 你必须在“for”循环中写入“if”条件,导致“for”循环的结构是:

      for(initialization, test condition, modifier expression)
    
     eg: for(int i=0 ; i<10 ; i++)
    

    如上例中的(int i = 0 ;; i ++)没有测试条件,它必须写在“for”循环中,否则它将继续迭代...。无限循环。

  2. 这里的方法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。但诚实的答案是我不确定!