1. 浮点数
public class FloatPrimitiveTest {
public static void main(String[] args) {
float a = 1.0f - 0.9f;
float b = 0.9f - 0.8f;
if (a == b)
System.out.println("true");
else
System.out.println("flase");
}
}
//-----------结果: false
//最好使用double
//如果精度要求高,比如计算金额或者精准传值的时候,尽量使用BigDecimal
import java.math.BigDecimal;
public class BigDecimalTest {
public static void main(String[] args) {
BigDecimal a = new BigDecimal(0.1);
System.out.println(a);
BigDecimal b = new BigDecimal("0.1");
System.out.println(b);
a = new BigDecimal("0.8");
b = new BigDecimal("0.7");
BigDecimal c = new BigDecimal("0.6");
if (a.subtract(b).equals(b.subtract(c)))
System.out.println("true");
else
System.out.println("false");
}
}
//结果:
//0.1000000000000000055511151231257827021181583404541015625
//0.1
//true
2. switch
/**
* 源码中的switch(param)调用了String的hashCode方法
* switch方法只支持int类型的匹配,其他基本数据类型都是会被
* 语法糖转换为整型来做判断和匹配
* switch使用的算法是二分查找法
*/
public class SwitchTest {
public static void main(String[] args) {
String param = null;
switch(param) {
case "null":
System.out.println("null");
break;
default:
System.out.println("default");
}
}
}
//------------结果: 抛出异常
3. Lock
这段代码有什么问题?
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class LockTest {
public static void main(String[] args) {
Lock lock = new ReentrantLock();
try {
doSomething();
lock.lock();
} catch (Exception e) {
} finally {
lock.unlock();
}
}
private static void doSomething() {
}
}
应该改为
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class LockTest {
public static void main(String[] args) {
Lock lock = new ReentrantLock();
lock.lock();
try {
doSomething();
} catch (Exception e) {
} finally {
lock.unlock();
}
}
private static void doSomething() {
}
}
(更新中)