PDF 课件和源代码下载地址:
https://gitee.com/geektime-geekbang/LetsJava
作者回复: 浮点数的精度涉及到浮点数本身的表示形式,理解起来还是略复杂的。简化版大概可以这么理解,在浮点数的世界里,一个具体的二进制的数字,其实表示的是一个范围,比如说下面的三行代码: System.out.println(Double.toHexString(0.00000000000000000000000000000000000100000000000000021)); System.out.println(Double.toHexString(0.00000000000000000000000000000000000100000000000000022)); System.out.println(Double.toHexString(0.00000000000000000000000000000000000100000000000000032)); 它们的输出是一样的 0x1.54484932d2e74p-120 0x1.54484932d2e74p-120 0x1.54484932d2e74p-120 这个意思是这三个数字,转换成浮点数的二进制后其实是一样的。这就是浮点数的精度的直观感受——非常相近的数字,二进制的表示形式是一样的。 就好像电子的轨道一样,不是说电子可以在任意轨道绕着原子核旋转,或者跃迁,光电效应了解一下?电子的轨道只能在固定的满足某个条件的轨道转圈。计算机也一样,不能表示无限精度的数字,只能尽力…… System.out.println(0.00000000000000000000000000000000000100000000000000032 == 0.00000000000000000000000000000000000100000000000000022); 比较也是一样的,正因为浮点数的这种不精确,导致其进行精确的比较是不可靠的,比如上面这两个不一样的数字,其实转换成二进制其实是一样的。输出的结果是true 同样的道理,这种不精确可能会积累,放大,所以浮点数的比较运算,比较推荐的是,求两个数字的差,然后让这个差取绝对值,和一个小到对业务没有影响的值比较,如果比这个值还小,就认为两个浮点数是相等的。
作者回复: StringBuilder 是Java标准类库的一个类, 可以用来高效的拼接字符串.
作者回复: 对,你get到了
作者回复: “”之间是个字符串呀,就是输出里的a+b=,1020就是真正的a+b的值。这样看上去比较直观。
作者回复: 编码是国际标准,任意一个字符,都会有一个数字与之对应。可以简单的使用下面几行代码,查看任意一个字对应的数字。 char ch = '编'; int num = ch; System.out.println(num); “怎样去做一个其他编制呢” 这个。。。就触及到我知识的盲区了。。。新建一个编码集有点难啊。。。现在一统天下的是Unicode,对应的编码用的最多的是UTF-8。 之前仅仅针对中文字符,有GBK编码集,但是现在一般都会使用UTF-8。
作者回复: 软键盘可以临时对付一下😂
作者回复: eclipse好久没用过了。你可以尝试看看eclipse的console有没有encoding的setting。
作者回复: 用赋值语句也会生成新的string对象,这个后面会详细讲
作者回复: 😂
作者回复: 对头,理解到位了~