臧萌JAVA入门FAQ记录

 

  • 老师你好,java中有这么多数据类型(byteshortintfloatdouble),而且都是从小到大包含的,后面写程序的时候所有的数字类型的数据都统一用double是不是可以,这样做有什么劣势?盼复,谢谢~

     

作者回复: double的问题在于无法精确的比较。而且有些场景可能会出现精度问题,比如本来应该是3,结果double变成了2.9999999999这都是有可能的。

由此造成的问题就是,要比较两个double的值很繁琐,要用两个double的数字相减,然后看差值的绝对值是不是小于一个对于业务足够可以忽略。比如对于表示钱的两个double数字,差的绝对值如果小于0.001,也就是一厘,那就可以认为是相等的。

如果业务上是整数,尽量用int或者long。比如表示手机的个数,汽车的个数等。

 

 

老师,大的整数是因为超过了默认的整数类型int的范围,所以要加个L表示long的数据类型,比如:
long v1 = 99; //正确
long v2 = 9999999999999L; //正确
小的浮点数并没有超过默认的浮点数类型double,为什么末尾要加f表示float数据类型呢,比如:
float f1 = 1.1; //报错
float f1 = 1.1f; //正确

作者回复: Java中的整数默认最多是int类型,比如9,8,99999999,最多是int类型。再想向上,就要加个L后缀,就代表是long类型。

而浮点数默认是double类型,比如1.1,所以如果要给float赋值,要加个后缀f代表是float而不是double。

 

  • long类型已经定义了是一个长整形占8个字节,为什么还要在数值后面加L

    作者回复: 你说的应该是类似这种写法:

    long longVal = 12345678987621L;

    这确实不是一种省心的写法。Java确实也可以做到让语句更简洁。没有做,是因为Java想让程序员更清楚的认识到自己用的是什么类型的值。

    literal value是literal value, 变量longVal是变量longVal只是赋值语句把它们连了起来。

    数值后面加个L,代表这个literal value是long类型。那么值域就可以是long的值域。默认的数值的literal value是int类型,只有加了L,才会被Java当成是long类型。不加L,12345678987621超出了int的值域,就会报错。

     

  • 为什么byte和shor后面不用加字母呢?我的理解是下面的,不知道对不对。
    数字的默认类型是int,byte被包含在int里面吗?所以long的值在被包含在int的值中时可以不加L,但是超出必须要加的。
    long的值在int类型中时,也是占用8bit的内存吗?
    java编译器会对这种类型有优化吗?

    作者回复: > 为什么byte和short后面不用加字母呢?

    是的, 编译器可以检查byte和short的值阈, 如果超出会报错. 比如
    byte b = 999;
    这个更多的是Java编译器从易用性做的一种简化. 如果每次给byte和short赋值, 都要标明一下类型, 会很繁琐.

    > 后面的问题...
    其实不存在long的值包含在int里面, 比如
    long abc = 999;
    这个过程其实是一种Java的自动类型转换, 低精度的数字可以赋值给高精度的数字. 这部分内容在"15 | 基本数据类型的更多语法点"有讲述.

  •  
    老师,为何Math.random()*(rangeEnd - rangeStart) + rangeStart的值阈是 [rangeStart, rangeEnd)呢?你说的那个公式我还是不太理解

    作者回复: Math.random()是[0, 1)

    所以Math.random()*(rangeEnd - rangeStart) + rangeStart就是

    rangeStart + [0, 1) * (rangeEnd - rangeStart)

    所以最小值就是0的时候,是rangeStart,最大值不包含为1的时候,就是rangeEnd

    所以是 [rangeStart, rangeEnd)


    Math.random的注释:
         * Returns a {@code double} value with a positive sign, greater
         * than or equal to {@code 0.0} and less than {@code 1.0}.

 

 

 

 

 

 

posted @ 2020-11-23 12:10  冬甲地  阅读(23)  评论(0编辑  收藏  举报