一个基础问题,搞不清楚

图片说明

为什么我输出的是浮点数,但是1/1000 得到的却是0.0

Java中如果没有小数点的数字,如1, 2, 3...等,默认是 int 类型, "/" 运算符有一个特性,如果除数和被除数都为整形,那么最后将结果向下取整。
如果想要输出正确的结果,应该将 1/1000中的某个数换成double类型,如写成 1.0 / 1000,这样jvm虚拟机在处理的时候,才不会自动将结果向下取整,
因为 1.0在java中默认为double类型。

1是整形,除法后还是整形,你用1.0

1/1000会强制转换成int,因为值小于1,所以直接舍弃小数点后面的,取0.

double i = 1;
double a = i/1000;
System.out.println(a);
你应该这样写,像你那样double width = 1/1000;那么1是int型的,1/1000还是int型的,计算完了1/1000才会转换成double型

计算精度优先转换精度,右边算式;
参数的最高级为整型,所以计算精度为整型,故计算结果为0;
左边变量为double,int精度不够,自动完成int到double的转换,最终为0.0

都是int类型,结果也是int类型

int型变量 / int型变量 其值仍为int型;需要将除数转换为高精度的类型

double width = 1/3d;
这才是对double型数值的计算,如 long a = 10L 一样
原因楼上的几位说的很清楚

只需要记住一点就好了,小类型和大类型一起做运算,运算一定会返回大类型那一边的。如int和double做运算,运算结果一定会是double类型的。