Java编程中看似简单却暗藏玄机的代码陷阱
浮点数精度问题
在Java中使用double或float进行金融计算时可能出现精度丢失
```java
System.out.println(0.1 + 0.2); // 输出0.30000000000000004
```
字符串比较的陷阱
```java
String s1 = hello;
String s2 = new String(hello);
System.out.println(s1 == s2); // false
System.out.println(s1.equals(s2)); // true
```
整数溢出的隐患
```java
int max = Integer.MAX_VALUE;
int result = max + 1; // 发生溢出,变成Integer.MIN_VALUE
System.out.println(result); // -2147483648
```
ArrayList的并发修改异常
```java
List list = new ArrayList<>(Arrays.asList(a, b, c));
for (String s : list) {
if (b.equals(s)) {
list.remove(s); // 抛出ConcurrentModificationException
}
}
```
finally块中的return覆盖
```java
public static int test() {
try {
return 1;
} finally {
return 2; // 最终返回2,覆盖了try中的返回值
}
}
```
自动装箱拆箱的空指针
```java
Integer num = null;
int value = num; // 抛出NullPointerException
```
日期时间的时区问题
```java
// 在默认时区下创建日期
Date date = new Date();
// 在不同时区的服务器上运行可能得到不同结果
```
HashMap的键对象可变性
```java
Map , String> map = new HashMap<>();
List key = new ArrayList<>();
key.add(a);
map.put(key, value);
key.add(b); // 修改键对象,导致无法通过原键获取值
System.out.println(map.get(key)); // null
```
这些陷阱往往源于对Java语言特性的理解不够深入,需要在日常编码中格外注意。
Java编程中的隐秘陷阱
721

被折叠的 条评论
为什么被折叠?



