读《Java解惑》的心得<一>


1.当取余操作返回一个非零的结果时,它与左操作数具有相同的正负号。例子:判断奇偶数。

2.并不是所有的小数都可以用二进制浮点数精确表示,比如0.1 0.01 和其他任何负次幂,还有10也是。二进制浮点对于货币计算是非常不合适的。解决办法就是改变单位,从而是浮点数变成整数,还可以用new BIg Decimal(String)构造器,而千万不要用Big Decimal(double)。后一个构造器将用他的参数的精确值来创建一个实例,相当于还是前面讲的那个问题!

3.final long MICROS_PER_DAY=24606010001000,在运算过程中会被当成是int型,所以结婚会溢出,解决办法就是在第一个数后面跟着一个L说明它是LONG型的运算。所以当很大的数字参与运算时,就要提防有溢出。

4.如果最初的数值类型是有符号的,就执行符号扩展,如果他是char那么不管它将被转换成什么类型,都执行零扩展。

5.混合类型的计算可能会产生混淆,这是因为会自动的拓宽较窄的那一个操作数,即进行符号扩展,十六进制和八进制字面常量无需显示的减号就可以表示负的值,所以最好避免混合类型的计算。

6.当且仅当+操作符的操作数中至少有一个String类型时,才会执行字符串连接操作。否则,执行加法运算。

7.当将一个char数值传递给println方法会打印一个Unicode字符而不是它的数字代码!char数组也是这样!String. valueOf,StringBuffer.append的char[ ]重载版本的行为也是类似的。然而在这些方法中没有定义字符串连接操作符。该操作符被定义为先对它的两个操作数执行字符串转换,然后连接所产生的两个字符串。对 包含数组在内的对象引用 的字符串转换定义如下:如果应用为null,将其转换成字符串"null"。否则该转换的执行就像无参数调用该引用对象的toString方法一样,但是如果调用toString方法的结果本来就是null,那么就用字符串"null"来代替。而数组是从Object那里继承的toString方法,这个方法返回的是"返回一个字符串,它包含了该对象所属类的名字,‘@’符号以及表示对象散列码的一个无符号数十六进制整数。

8.String的编译期常量是内存限定的,换句话说,任何两个String类型的长常量表达式,如果指定的是相同的字符序列,那么它们就用同一个对象引用表示,这是用==去判断他们的结果就是ture。

9.== 操作符并不是测试两个对象是否相等,而是两个对象的引用是否相同,换句话说,它测试这两个对象引用的是否正好引用同一个对象。应该使用equals方法。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,839评论 18 399
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy阅读 9,554评论 1 51
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young阅读 3,994评论 1 10
  • 贵阳的冬天真的冷。 下午下班回学校,下车的时候,符号跟我说,她叫你一起去吃饭,真的,不信我给你看截图。我笑笑,不去...
    江北同学阅读 296评论 0 0
  • 坚持原创分享第58天 “生活是一团麻,那也是麻绳拧成的花;生活象一根线,也有那解不开的小疙瘩呀!生活是一条路,怎能...
    宛如初夏阅读 299评论 0 0