Java基础知识陷阱

Java浮点数精确运算陷阱

System.out.println(2.0 - 1.1);

以上结果为0.899999999999999...;

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

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

Java自增自减陷阱

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

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


Java字符和字符串陷阱

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

结果为:
ab
195
ab

原因很简单,字符间的操作是将ASNII码进行操作的。

第三行将字符‘b’强制转换为“b”,然后将字符串拼接。


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将不会再执行

你可能感兴趣的:(Java基础知识陷阱)