int 是整型,a+0.1之后只能输出0
因为a+=0.1是把结果给a,而a是int,所以加0.1后,结果是0.1但是再转换为int就变成0了
而第二个p+h结果生成一个临时对象0.1,然后直接输出了
这个问题牵扯到了数据字节长度转化的问题。首先int是4个字节,double是8个字节,所以转化会出现精度丢失的问题。
首先看看你的代码分解成下面这样的话,输出的结果仍然是0.
int a = 0;
a+=0.1;
System.out.println(a);
a+=0.1;
System.out.println(a);
我对 += 这个符号不是多了解,但是你可以这样再写一遍
int a = 0;
//a= a + 0.1;//这样会报错要写成下面这样
a= (int )(a + 0.1);
System.out.println(a);
// a= a + 0.1; 同上报错
a= (int )(a + 0.1);
System.out.println(a);
这样的结果仍然是0.那么你就会好奇了,为什么分明加了0.1结果还是0呢?
这个原因在于 a + 0.1 这个语句的结果不是int类型,而是double类型了,但是我们用了int强制类型转换,那么double类型是8个字节,
int类型是4个字节,这样就会有4个字节的数据会丢失,而丢失的那部分就是小数部分,你可以写个测试代码看一下。
double a = 1.23123;
a= (int )a;
System.out.println(a);
这个输出的结果是1,就说明后面的小数都丢失了,所以,double转int是会存在数据丢失的问题。这也就是为什么你的for语句里面结果都是0了,
因为你的for语句里面的a值并没有增加。
个人见解,如果有别的高见,请忽略,如有错误请指出,虚心请教。