java基础知识陷阱

来源:互联网 发布:手机免费看书软件 编辑:程序博客网 时间:2024/06/16 23:05

1.java浮点数精确运算陷阱:

System.out.println(2.0-1.1);

运算结果是:0.8999999999999999

如果需要精确运算,需要使用BigDecimal类进行运算:

BigDecimal a1 = new BigDecimal(Double.toString(2.0));BigDecimal a2 = new BigDecimal(Double.toString(1.1));System.out.println(a1.subtract(a2).doubleValue());

2.java自增自减陷阱

int j = 0;for(int i=0;i<100;i++){    j = j++;}System.out.println("j="+j);

结果为:j=0

这是因为在JVM工作原理中,先执行j++后,再将j++之前的值赋给j,也就是j自加1后,再将0赋值给j,因此在这个代码中执行的结果是j=0。

3.java字符和字符串陷阱

System.out.println("a" + "b");System.out.println('a' + 'b');System.out.println("a" + 'b');

结果为:
ab
195
ab
原因很简单,字符间的操作是将ASNII码进行操作的。第三行将字符‘b’转换为“b”,然后将字符串拼接。

4.java return与try-finally陷阱

try{    return false;}finally{    return true;}

结果为:true
这个很简单,在try的return前将会执行finally,finally有return,将会优先return。

try{    System.out.println("Hello!");    System.exit(0);}finally{    System.out.println("GoodBye!");}

结果为:Hello!
结果很显而易见,因为遇到System.exit(0),finally将不会再执行。

0 0