为什么最后的答案等于18,我想知道具体的过程
int x=5*3; int y=x+5/x+3 System.out.println(y);
-
5/x,5和x都是int型,整数除法没有小数,结果等于0 剩下15+3为什么是18不用讲吧 -==-=- 这里一个重要的知识点,必须记牢: 一个运算,或者说表达式,它的结果是跟参与运算的最大的类型匹配的 比如一个long+int,结果是long;double+int,结果是double 注意:运算是分步骤的,那么每个中间结果类型是根据它所在的步骤相关的。假如要计算一个double+int/int,那么除法优先级高,要先计算,两个int相除类型还是int,最终就会丢失精度。 -=-=-= 如果想让除法不丢失精度,那么两种办法 1.直接强制转换 比如int a=1,b=2; 要计算a/b,可以这样c=(double)a/b 2.利用上述规则,构造一个表达式,让结果自动转换类型:a*1.0/b,a先乘以1.0这个double型,结果就变成double类型了,再除以b就是double型除以int型,最终结果还是double型,不丢失精度
-
5/x小于1,被截断了,int/int 得到int类型,向下取整;所以这里y=15+0+3 只有int/double 或者double/int才能得到double类型,就算你是y=x+5.0/x+3,y=15+0.33333+3<19还是取成18
-
x = 15 y = 15 + 5 / 15 + 3 = 15 + 0 + 3 = 18 两个int整除是没有小数的
-
x=15 y=15 + 5/15 + 3// 这里的x是int型 5/15等于0余5 y=15+0+3 y=18
发表回复