本篇文章为大家展示了Java的注意事项有什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

为建湖等地区用户提供了全套网页设计制作服务,及建湖网站建设行业解决方案。主营业务为成都网站设计、网站建设、建湖网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
1、 不要在 foreach 循环里进行元素的 remove/add 操作,可以在fori中进行remove/add。remove 元素请使用 Iterator 方式,如果并发操作,需要对 Iterator 对象加锁。【参考:https://my.oschina.net/u/3955185/blog/4496726】
//正例一: Listlist = new ArrayList<>(); list.add("1"); list.add("2"); Iterator iterator = list.iterator(); while (iterator.hasNext()) { String item = iterator.next(); if (删除元素的条件) { iterator.remove(); } } //正例二: for (int i=0;i < list.size();i++) { if (list.get(i)==2) { list.remove(i); } } //反例: for (String item : list) { if ("2".equals(item)) { list.remove(item); } }
原因:由于foreach底层是用iterator进行遍历,源代码如下:
public E next() {
checkForComodification();
int i = cursor;
if (i >= size)
throw new NoSuchElementException();
Object[] elementData = ArrayList.this.elementData;
if (i >= elementData.length)
throw new ConcurrentModificationException();
cursor = i + 1;
return (E) elementData[lastRet = i];
}其中checkForComodification()具体实现为:
final void checkForComodification() {
if (modCount != expectedModCount){
throw new ConcurrentModificationException();
}
}从源代码可以看出,当modCount != expectedModCount 会抛异常,使用list的remove()操作之后,modCount会加1,但是expectedModCount不会加1,即两值不等,会抛异常。 使用Iterator的remove()会更改expectedModCount的值,故需使用此方式进行remove/add。
public void remove() {
if (lastRet < 0){
throw new IllegalStateException();
}
checkForComodification();
try {
ArrayList.this.remove(lastRet);
cursor = lastRet;
lastRet = -1;
expectedModCount = modCount;
} catch (IndexOutOfBoundsException ex) {
throw new ConcurrentModificationException();
}
}如果使用fori进行remove/add,不会走checkForComodification()方法,所以也可以使用fori进行操作,如正例2。
2、Integer比较的时候,使用equals,否则当比较的数据不在-128-127之间,比较的不是值,而是对象的引用,比较结果不是预期值。
上述内容就是Java的注意事项有什么,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注创新互联行业资讯频道。
分享名称:Java的注意事项有什么
本文来源:http://www.jxjierui.cn/article/gogcjo.html


咨询
建站咨询
