• 坏人
    2019-05-21
    为什么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 | 基本数据类型的更多语法点"有讲述.

     1
     4
  • 余敏
    2019-08-19
    Java整数缺省、浮点数缺省是什么意思啊?

    作者回复: 缺省值,default 值,默认值三个词是一个意思。代表某种数值类型的......默认值。

    
     3
  • 七月有风
    2019-05-15
    老师,main函数中的 String[] args 是什么意思? 如果不加会报错。

    作者回复: 跟我读:参数,英文名parameter。第二篇我们会详细讲述的。对于这些内容,第一篇混个手熟眼熟就好。关注点放在main函数里面的代码哈

     1
     1
  • sarah
    2019-10-19
    作者回复: 这个是从两个方面理解,首先是从char的本意。char的本意是要表示一个字符,只要是计算机里有的字符,char都能表示。

    最多6万多个,是从char的存储层面理解。char是两个byte组成的,所以最多也就只能表示6万多个数字,也就是最多只能表示六万多个字符。当然我们也不用担心这个事情,六万多个是足够我们用了的。——-老师,关于char问题的回复还有有疑问:1.两个byte组成,第一位是符号位那应该是2的15次方,也就是3w多?2.从char的存储层面理解是指char能表示0到6w多内的任意字符吗?

    作者回复: 1.两个byte组成,第一位是符号位那应该是2的15次方,也就是3w多?

    char是无符号数。所以还是六万多。

    2.从char的存储层面理解是指char能表示0到6w多内的任意字符吗?

    指char的存储层面就是两个byte,两个byte能代表无符号数6w多个。所以char可以利用这六万多个数,表示六万多个字符。

    
    
  • 100执行%
    2019-10-16
    为什么float 100.1111111输出来是100.11115呢 不应该是4舍5入吗

    作者回复:
    这个不是四舍五入的范畴,而是计算机里的浮点数(不止是Java)无法精确表示每一个小数的问题。详细参见
    https://github.com/deepnighttwo/LetsJava/blob/master/FAQ/01%E7%AB%A0-%E4%B8%BA%E4%BB%80%E4%B9%88%E8%AE%A1%E7%AE%97%E6%9C%BA%E9%87%8C%E7%9A%84%E6%B5%AE%E7%82%B9%E6%95%B0%E4%B8%8D%E7%B2%BE%E7%A1%AE.md

    
    
  • mick
    2019-06-01
    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的值域,就会报错。

     2
    
  • Jorry有桥(笨小孩)
    2019-05-30
    System.out.println('\f');
    System.out.println('\'');
    System.out.println('\t');
    还有一些特殊字符

    作者回复: 谢谢补充

    
    
  • 洋葱切丁
    2019-05-24
    老师你好,java中有这么多数据类型(byte、short、int、float、double),而且都是从小到大包含的,后面写程序的时候所有的数字类型的数据都统一用double是不是可以,这样做有什么劣势?盼复,谢谢~

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

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

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

    
    
  • Amanda
    2019-05-19
    关于char 类型,理解其表示所有值域内的任意一个字符,但文稿中后半句“值域是所有字符(最多65535个)”是什么意思?

    作者回复: 这个是从两个方面理解,首先是从char的本意。char的本意是要表示一个字符,只要是计算机里有的字符,char都能表示。

    最多6万多个,是从char的存储层面理解。char是两个byte组成的,所以最多也就只能表示6万多个数字,也就是最多只能表示六万多个字符。当然我们也不用担心这个事情,六万多个是足够我们用了的。

    
    
我们在线,来聊聊吧