现在就一样了
public class Test1 {
  public static void f1(int i) {
    String s = new String();
    if (i % 16 > 9) {
      s = (char) ('a' + i % 16 - 10) + s;
    } else {
      s = i % 16 + s;
    }
    System.out.println(s);
  }
  public static void f2(int i) {
    String s = new String();
    s = ((i % 16 > 9) ? ((char)('a' + i % 16 - 10)+s) : ((char)(i % 16) + s));
    System.out.println(s);
  }  public static void main(String[] args) {
    f1(15);
    f2(15);
  }
}

解决方案 »

  1.   

    这样也可以,你是少了个强制类型转换
    public class Test1 {
      public static void f1(int i) {
        String s = new String();
        if (i % 16 > 9) {
          s = (char) ('a' + i % 16 - 10) + s;
        } else {
          s = i % 16 + s;
        }
        System.out.println(s);
      }
      public static void f2(int i) {
        String s = new String();
        s = ((i % 16 > 9) ? (char)('a' + i % 16 - 10) : (char)(i % 16))+s;
        System.out.println(s);
      }  public static void main(String[] args) {
        f1(15);
        f2(15);
      }
    }
      

  2.   

    f1是 String+char 的连接操作, f2 因为后半部有个int型的 i%16, 前半部的char型 'f'也被转成了int. 因此, f1是( ""+'f')形成 "f", f2是 (""+102) 形成 "102".我估计是这个原因, 这个问题确实比较有趣.