JAVA 基础类型转换 精度问题

图片说明
为什么无限输出0?
图片说明
这里又输出0.1?

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值并没有增加。
个人见解,如果有别的高见,请忽略,如有错误请指出,虚心请教。