JAVA编码中容易踩坑的十大陷阱 !!!警惕

本文总结了Java编程中容易遇到的十大陷阱,包括循环中操作目标list、对象作为参数传递、字母L的使用、流资源释放、日期格式转换并发问题等。详细解释了错误的写法和正确的处理方式,帮助开发者避免陷阱,提高代码质量。
摘要由CSDN通过智能技术生成

JAVA编码中存在一些容易被人忽视的陷阱,稍不留神可能就会跌落其中,给项目的稳定运行埋下隐患。此外,这些陷阱也是面试的时候面试官比较喜欢问的问题。

本文对这些陷阱进行了统一的整理,让你知道应该如何避免落入陷阱中,下面就一起来了解下吧。

循环中操作目标list

遍历List然后对list中符合条件的元素进行删除操作,这是项目里面非常常见的一个场景。

先看下两种典型的错误写法:

错误写法1:

for (User user : userList) {
    if ("男".equals(user.getSex())) {
        userList.remove(user);
    }
}

错误原因:

在循环或迭代时,会首先创建一个迭代实例,这个迭代实例的 expectedModCount 赋值为集合的 modCount 。而每当迭代器使⽤ hashNext() / next() 遍历下⼀个元素之前,都会检测 modCount 变量与 expectedModCount 值是否相等,相等的话就返回遍历;否则就抛出异常 ConcurrentModificationException ,终⽌遍历。

如果在循环中添加或删除元素,是直接调用集合的 add() , remove() 方法,导致了 modCount 增加或减少,但这些方法不会修改迭代实例中的 expectedModCount ,导致在迭代实例中 expectedModCount 与 modCount 的值不相等,抛出ConcurrentModificationException异常。

错误写法2:

for (int i = 0; i < userList.size(); i++>) {
    if ("男".equals(user.getSex())) {
        userList.remove(i);
    }
}

错误原因:

删除元素之后,元素下标发生前移,但是指针是不变的,再处理下一个的时候,就可能会有部分元素被漏掉没有处理。

那正确的方式应该如何处理呢?接着往下看。

正确写法1:

// 使用迭代器来实现
Iterator iterator = userList.iterator();
while (iterator
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值