public class Test{
  public static void main(String[] args){
    long[] a1={1,2,4};
    System.out.print(a1[0] + a1[1] +a1[2] +" ");
    System.out.println(" " + a1[0] +a1[1] +a1[2]);
  }
}
为什么编译后的结果是:7  124

解决方案 »

  1.   

    你的代码相当于以下的:
            System.out.print(new Long(a1[0] + a1[1] + a1[2]).toString() +" ");
            System.out.println(" "+new Long(a1[0]).toString() +new Long(a1[1]).toString()+new Long(a1[2]).toString() );
    懂了么?
      

  2.   

    这是一个字符转化的问题,"+"既是操作符"+",又是连接字符。字符串相当于字符数组
    a1[0] + a1[1] +a1[2] +" "  把数组相应下表的值加起来,然后在和" "连接;
    " " + a1[0] +a1[1] +a1[2]  把" "转化为Asscii值,然后和a1[0]相加;
    你可以这样:
    System.out.println(String.valueOf(a1[0])+String.valueOf(a1[1])+String.valueOf(a1[2])+" ");
    就可以得到字符串了,你手动装箱吧
      

  3.   

    转换成字符串的一种方式System.out.print((new StringBuilder(String.valueOf(a1[0] + a1[1] + a1[2]))).append(" ").toString());
    System.out.println((new StringBuilder(" ")).append(a1[0]).append(a1[1]).append(a1[2]).toString());
      

  4.   

    这个挺简单的,朋友,看看  (1) System.out.print(a1[0] + a1[1] +a1[2] +" ");的结果是:7
       (2) System.out.println(" " + a1[0] +a1[1] +a1[2]);的结果是124 原因是如果你的数组是整形数据,也就是可以使用+做加法,而对于“”的转换,就是转换成一种字符串,字符串中的+是连接字符串的作用,明白了这个后,你就要看看你的运算是先做加法还是先转换为字符串,像(1)中的,你看看它是先做整形数字的加法,最后在强制转换为字符串,“”的作用其实跟toString()作用一样,(2)中的是先强制转换为字符串,这样连后面的整形也被强制装换为字符串类型了,+在字符串中只能做连接字符!如果还有什么不懂的,可以再跟你说说~~
      

  5.   

    谢谢各位,已经看明白,也试验过了,是转换成字符串时机的问题。
    比如下面这句System.out.println(a1[0]+a1[1]+a1[2]+" "+5+6);输出结果就是7 56
      

  6.   

    这是一个字符转化的问题,"+"既是操作符"+",又是连接字符。字符串相当于字符数组
    a1[0] + a1[1] +a1[2] +" " 把数组相应下表的值加起来,然后在和" "连接;
    " " + a1[0] +a1[1] +a1[2] 把" "转化为Asscii值,然后和a1[0]相加.如果有需要其他java方面的帮助可以加入我们的java开发联盟。
     群号:
         247286682  欢迎来自全国各地的java爱好者加入。群里有来自全国各地的java开发高手与你一起探讨java技术。
      来者请注明csdn。