java中的那些坑

“==” 与 equals 的比较,结果不同。(使用equals才靠谱。)

Integer ig1 = new Integer(1);
Integer ig2 = new Integer(1);
System.out.println(ig1 == ig2);//对象地址值,都是new 的地址,false
System.out.println(ig1.equals(ig2));//true

 “==”  与 equals 比较,byte 范围内的 整型数字 作比较 用 “==” 时,得特殊考虑。(使用equals才靠谱。)

/*
* byte : -128~127 
* 当数据在byte范围内,JVM不会从新new对象。
*/
Integer ig3 = 127;//Integer  ig3 = new Integer(127);
Integer ig4 = 127;//Integer  ig4 = ig3;
System.out.println(ig3==ig4);//true
System.out.println(ig3.equals(ig4));//false

浮点数计算 得不到正确的值。(尽量使用 BigDecimal 去参与运算才安全)

/* 特殊情况计算 有问题 
 * 原因:计算机二进制中,表示浮点数不精确造成
 * 超级大型的浮点数据,提供高精度的浮点运算,
 *         使用 BigDecimal,应尽可能使用 public BigDecimal(String val) 去参与运算。
 * */
System.out.println(0.09 + 0.01);//0.09999999999999999
System.out.println(1.0 - 0.32);//0.6799999999999999
System.out.println(1.015 * 100);//101.49999999999999
System.out.println(1.301 / 100);//0.013009999999999999

  

 

posted @ 2018-01-01 22:20  TakeTry  阅读(344)  评论(0编辑  收藏  举报