`
Jon_LT
  • 浏览: 104875 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

《Java 解惑》学习笔记

    博客分类:
  • Java
阅读更多

第2章

 

判断是否是奇数  i % 2 == 1;  <- 错误的

当 i 是负数的时候,明显不能正确。 可以换成和0判断。 i % 2 == 0 ; 就可以避免。

更加优的性能: (i & 1) != 0;

 

Double 相减不一定出现想要的结果, 因此需要精密答案的地方要避免使用 float, double 。 而用 int , long , BigDecimal

例如 : new BigDecimal("2.00").subtract(new BigDecimal("1.10"))  结果为 0.90

           2.00 - 1.10                                                                           结果为 0.8999999999999999

BigDecimal(String)  不可用 BigDecimal (Double ) 代替,否则 不精确。 

 

 

char x = 'X';

int i = 0; 

System.out.println(true ? x : 0);

System.out.println(false ? i : x);   输出结果为 X88 , 原因是 X 强制转换成为 int 型。 

 

+= 类似的为符合赋值表达式, 自动地将说执行计算的结果转型为其左侧变量的类型。  不同与 a + b = c . 

Object x = "buy";

String i = "Effective Java ! ";

x = x + i;  √  (x + i 是 String型的, Sting 与 Object 兼容)

x += i;     ×

 

注意 replace() 和 replaceAll() 的区别 : 链接  

 

不能用return , break, continue 或者 throw 来退出 finally 语句块,并且千万不要允许让受检查的异常传播到finally 语句块之外。

 

通过覆写,可以获得动态的分派;而通过隐藏,你却得不到这种特性。(继承static 的函数,其实是隐藏-谜题48)

 

只要你覆写了equals方法,你就必须同时覆写hashcode

 

hashset类是使用equals(object)方法来测试元素是否等性,申明时注意是覆写而不是重载。

(@override 防止误写)

 

用String.split 代替String.Tokenizer ,因为前者可以用正则表达式,更加敏捷。

 

Date 将1月用0表示,而Calender 延续了这个错误,用Calendear.December 来表示明显而正确。

 

final 修饰符对方法和域而言,意味着完全不同的事情,

方法: 不能被覆写或者隐藏

域:    不能被赋值超过一次

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics