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型,不丢失精度
x = 15
y = 15 + 5 / 15 + 3 = 15 + 0 + 3 = 18
两个int整除是没有小数的
5/x = 0
int类型除法没有小数,只取整数位
x = 15;
y = 15 + 5/15 + 3 = 18
因为5/15取整为0
x=15
y=15 + 5/15 + 3// 这里的x是int型 5/15等于0余5
y=15+0+3
y=18
整数相除,自动取整
x=5*3=15
y=x+5/x+3=15+5/15+3=15+0+3=18(5/15是int的运算,结果没有小数位,所以结果是0)
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
java 中整数相除得到的值为整数,如果小于1则值为0;
int x = 5 * 3;
int y = x + 5 / x + 3;
System.out.println(y);
int x = 5 * 3;
执行后 x 值为 15;int y = x + 5 / x + 3
= 15 + 0 + 3 = 18