2016-04-02 92 views
7

随着下面的代码示例为什么在第一次加入(1/2 + 1/2)打印0但第二加法打印00.爪哇整数加法与字符串

System.out.println(1/2+1/2+"=1/2+1/2"); 
System.out.println("1/2+1/2="+1/2+1/2); 

输出:

0 = 1/2 + 1/2

1/2 + 1/2 = 00

+1

因为它从左到右。第一个是'1/2',它是'0'(整​​数除法),然后'1/2'再次是0。所以'0 + 0 = 0',那么它将把它连接到字符串'1/2 + 1/2'上。对于第二个,它将在字符串1/2 + 1/2 ='上再次进行concat(1/2)(1/2)为0,然后再次为下一个 – 3kings

回答

4

整型数学运算(中间体1通过INT 2划分为int 0,如果要一个浮点结果投下一个或两者的1和2为浮点类型)和操作顺序第二个例子是String串联。编译器开启到这

System.out.println(new StringBuilder("1/2+1/2=").append(1/2).append(1/2)); 

,然后你会得到

System.out.println(new StringBuilder("1/2+1/2=").append(0).append(0)); 
0

第一条语句 “的System.out.println(1/2 + 1/2 +”= 1/2 + 1/“);”打印0因为从1/2获得的整数值为零。剩余部分被丢弃,因为1/2等于0.5,所以.5被丢弃。 第二条语句“System.out.println(”1/2 + 1/2 =“+ 1/2 + 1/2);”由于连接符号打印出00。在第二个语句中,第一个整数1显示为+1,因此语句实际上被读作(+1/2 +1/2),这就是为什么它返回00. 如果第二个语句的设置如下所示:

System.out.println("1/2+1/2="+ (1/2+1/2)); 

输出结果与第一条语句相同。

-2

java假定除法的结果是整数,因为它的成员是整数。对于每个部门的浮动结果(0.5),除数或被除数应该是浮点类型float

System.out.println(“1/2 + 1/2 =”+(1/2.0 + 1/2.0 ));

0

表达式从左到右进行评估。在第一种情况下,它的确是int+int(即0),然后是int + "= String"这是String tmp = "0= String"。在另一种情况下,您有'“String =”+ int which becomes“String = int”to which you append one more int`。因此您可以打印字符串“0”和“0”。