为什么最后的答案等于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型,不丢失精度

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
  • 因此 y 的值为 18