關(guān)于Java中增強(qiáng)for循環(huán)使用的注意事項(xiàng)
序言
for循環(huán)語句是java循環(huán)語句中最常用的循環(huán)語句,一般用在循環(huán)次數(shù)已知的情況下使用。for循環(huán)語句的語法格式如下:
java語言 for語句的用法
for(初始化表達(dá)式;循環(huán)條件;操作表達(dá)式){
執(zhí)行語句
……
}
開發(fā)過程中,使用for循環(huán)遍歷集合或數(shù)組是司空見慣的一件事,大家也習(xí)慣這樣操作,但是有時(shí)候?yàn)榱撕啽?,我們可能?huì)使用增強(qiáng)for循環(huán),也就是類似for(String s : strList )寫法,但是有時(shí)候稍有不慎,可能會(huì)帶來一些莫名奇妙的錯(cuò)誤,比如ConcurrentModificationException,剛開始可能大家也會(huì)一頭霧水,反復(fù)檢查代碼并沒有發(fā)現(xiàn)有什么寫的不對(duì)的地方。確實(shí),代碼并沒有問題,只是使用增強(qiáng)for循環(huán)的時(shí)候,有些注意事項(xiàng)需要我們清楚,本文主要針對(duì)開發(fā)中遇到的問題和代碼示范下增強(qiáng)for的錯(cuò)誤用法。
代碼示例
1.錯(cuò)誤寫法
if(fileList.size() > 0){
for(UserFile userFile : fileList){
if(Constants.IS_DIR_YES == userFile.getIsDir()){//如果是文件夾,遞歸查找子文件,然后放入返回的結(jié)果list中
childFileList = getChildFile(userFile.getId());
if(childFileList.size() > 0){
for(UserFile childUserFile : childFileList){
//給子文件賦予上一級(jí)的文件夾路徑
childUserFile.setFilePath("/" + userFile.getFileName() + childUserFile.getFilePath());
fileList.add(childUserFile);
}
}
}
}
}
2.正確寫法
if(fileList.size() > 0){
for (int i = 0; i < fileList.size(); i++) {
if(Constants.IS_DIR_YES == fileList.get(i).getIsDir()){//如果是文件夾,遞歸查找子文件,然后放入返回的結(jié)果list中
childFileList = getChildFile(fileList.get(i).getId());
if(childFileList.size() > 0){
for (int j = 0; j < childFileList.size(); j++) {
//給子文件賦予上一級(jí)的文件夾路徑
childFileList.get(j).setFilePath("/" + fileList.get(i).getFileName() + childFileList.get(j).getFilePath());
fileList.add(childFileList.get(j));
}
}
}
}
}
3.寫法區(qū)別及報(bào)錯(cuò)原因
區(qū)別:主要是將錯(cuò)誤寫法中的增強(qiáng)for循環(huán)換成普通的for循環(huán),如圖所示


原因分析:增強(qiáng)for循環(huán)其實(shí)內(nèi)部是通過迭代器實(shí)現(xiàn)的,我們知道在迭代器中,迭代的時(shí)候不允許修改集合中的對(duì)象,不然會(huì)拋出ConcurrentModificationException異常。而我們的錯(cuò)誤代碼中,對(duì)fileList集合調(diào)用了fileList.add(childUserFile)方法往集合中添加新元素,而迭代器卻不知道,所以也會(huì)報(bào)這樣的錯(cuò)誤信息。實(shí)際上,增加for循環(huán)或迭代器遍歷元素的時(shí)候,是不能通過集合修改元素的,改成普通for循環(huán)就行了。
總結(jié)
到此這篇關(guān)于Java中增強(qiáng)for循環(huán)使用的注意事項(xiàng)的文章就介紹到這了,更多相關(guān)Java增強(qiáng)for循環(huán)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring @ComponentScan注解使用案例詳細(xì)講解
@ComponentScan注解的作用可以簡述為:將項(xiàng)目中所有被@Component注解直接或者間接標(biāo)記的類---->組裝成BeanDefinition---->然后以key=beanName, value=BeanDefinition的形式存儲(chǔ),為后續(xù)生成bean對(duì)象做準(zhǔn)備2023-03-03
Java中==符號(hào)與equals()的使用詳解(測試兩個(gè)變量是否相等)
下面小編就為大家?guī)硪黄狫ava中==符號(hào)與equals()的使用詳解(測試兩個(gè)變量是否相等)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-07-07
快速解決springboot在yml配置了啟動(dòng)端口但啟動(dòng)還是8080問題
這篇文章主要介紹了快速解決springboot在yml配置了啟動(dòng)端口但啟動(dòng)還是8080問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-03-03
Java 數(shù)組轉(zhuǎn)List的四種方式小結(jié)
最近看了下數(shù)組轉(zhuǎn)List的實(shí)現(xiàn)方法,總共有4種,本文就詳細(xì)的介紹一下,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09
IDEA不識(shí)別Java文件:文件變橙色&顯示后綴名.java的解決
這篇文章主要介紹了IDEA不識(shí)別Java文件:文件變橙色&顯示后綴名.java的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03
mall整合SpringSecurity及JWT實(shí)現(xiàn)認(rèn)證授權(quán)實(shí)戰(zhàn)
這篇文章主要為大家介紹了mall整合SpringSecurity及JWT實(shí)現(xiàn)認(rèn)證授權(quán)實(shí)戰(zhàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06

