Java foreach循環(huán)是否可以修改數(shù)據(jù)的值問(wèn)題解決方法
一、問(wèn)題引出
最近在做項(xiàng)目的時(shí)候,需要修改一個(gè)數(shù)組里面各個(gè)元素的值,是這樣的:在如圖所示的程序

當(dāng)中,我本想是修改數(shù)組array當(dāng)中各字符串的值(將其變成大寫(xiě)),采取的是foreach循環(huán),然而我運(yùn)行之后發(fā)現(xiàn)很奇怪:數(shù)組的內(nèi)容并未發(fā)生改變 ,然后我采取了for循環(huán)再次嘗試對(duì)數(shù)組元素進(jìn)

行修改:這次可以了!


二、問(wèn)題解決
于是我上網(wǎng)查閱了相關(guān)的資料,看到一篇大佬發(fā)出的文章,我頓時(shí)茅塞頓開(kāi):
foreach循環(huán)迭代數(shù)組元素時(shí),不能改變數(shù)組元素的值,因此,不要對(duì)foreach的循環(huán)變量進(jìn)行賦值:基本類(lèi)型數(shù)組,不可改變;但引用類(lèi)型數(shù)組(除String類(lèi)型),可以改變。
我頓時(shí)醒悟了!下面詳細(xì)介紹:
1.基本類(lèi)型數(shù)組
foreach不可以改變變量,即使用集合存變量也不可以(foreach循環(huán)中,是把容器中的數(shù)據(jù)交給了那個(gè)element,當(dāng)容器中裝的是變量時(shí),foreach是改變不了元數(shù)據(jù)的,想改變只能通過(guò)for循環(huán))。如圖可以看到,并沒(méi)有什么用,無(wú)法改變:


2.引用類(lèi)型數(shù)組
①String類(lèi)型
正如開(kāi)篇所說(shuō),String類(lèi)型是一個(gè)特例,無(wú)法被修改,只能通過(guò)for循環(huán)進(jìn)行修改。
②其它引用類(lèi)型
foreach可以改變對(duì)象的值,對(duì)象和變量不一樣,變量是獨(dú)立的,但是如果把一個(gè)對(duì)象傳給了另一個(gè)對(duì)象,他們就是一個(gè)對(duì)象,引用的地址是一樣的,所以改變其中一個(gè)就改變了另一個(gè)。如圖所示:可以看到foreach可以修改對(duì)象的類(lèi)型。


但foreach不能刪除或添加對(duì)象(foreach循環(huán)中,是把容器中的數(shù)據(jù)交給了那個(gè)element,當(dāng)容器中裝的是對(duì)象時(shí),對(duì)象的賦值(賦的是引用,即給的是原對(duì)象所在的地址)。為什么不能刪除或者添加變量,因?yàn)槊看芜M(jìn)入foreach時(shí),就會(huì)調(diào)用java.util.LinkedList.next()方法,該方法會(huì)對(duì)集合的長(zhǎng)度進(jìn)行判斷,所以會(huì)出現(xiàn)異常,如圖所示:


到此這篇關(guān)于Java foreach循環(huán)是否可以修改數(shù)據(jù)的值的文章就介紹到這了,更多相關(guān)Java foreach循環(huán)是否修改數(shù)據(jù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MyBatis查詢數(shù)據(jù)庫(kù)語(yǔ)句總結(jié)
MyBatis是一種持久化框架,可以與許多不同類(lèi)型的關(guān)系型數(shù)據(jù)庫(kù)連接,下面這篇文章主要給大家介紹了關(guān)于MyBatis查詢數(shù)據(jù)庫(kù)語(yǔ)句的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-06-06
Java實(shí)現(xiàn)提取不重復(fù)的整數(shù)實(shí)例
這篇文章主要介紹了Java實(shí)現(xiàn)提取不重復(fù)的整數(shù)實(shí)例,具有一定借鑒價(jià)值,需要的朋友可以參考下2017-12-12
intellij idea自動(dòng)生成類(lèi)注釋和方法注釋配置方法
這篇文章主要介紹了intellij idea自動(dòng)生成類(lèi)注釋和方法注釋設(shè)置方法,需要的朋友可以參考下2023-01-01
Java操作minio刪除文件夾及其文件方法(MinIO基本使用)
MinIO是一個(gè)高性能、無(wú)限擴(kuò)展的開(kāi)源對(duì)象存儲(chǔ)服務(wù)器,它以對(duì)象的形式存儲(chǔ)數(shù)據(jù),并兼容Amazon S3接口,它適用于大規(guī)模數(shù)據(jù)存儲(chǔ)、大數(shù)據(jù)分析、文件共享和備份等應(yīng)用場(chǎng)景,這篇文章主要介紹了java操作minio刪除文件夾及其文件方法,需要的朋友可以參考下2024-02-02
Java語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單FTP軟件 FTP軟件本地窗口實(shí)現(xiàn)(5)
這篇文章主要為大家詳細(xì)介紹了Java語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單FTP軟件,F(xiàn)TP軟件本地窗口的實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03
利用Java搭建個(gè)簡(jiǎn)單的Netty通信實(shí)例教程
這篇文章主要給大家介紹了關(guān)于如何利用Java搭建個(gè)簡(jiǎn)單的Netty通信,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05
java項(xiàng)目idea構(gòu)建總是報(bào)內(nèi)存溢出怎么解決詳析
這篇文章主要介紹了java項(xiàng)目idea構(gòu)建總是報(bào)內(nèi)存溢出怎么解決的相關(guān)資料,方法包括增加IDEA內(nèi)存分配、調(diào)整項(xiàng)目編譯設(shè)置、配置Gradle構(gòu)建內(nèi)存、優(yōu)化項(xiàng)目結(jié)構(gòu)、清理不必要的依賴、使用命令行構(gòu)建、更新IDEA和JDK、清理IDEA緩存和禁用不必要的插件,需要的朋友可以參考下2025-03-03
spring學(xué)習(xí)之創(chuàng)建項(xiàng)目 Hello Spring實(shí)例代碼
這篇文章主要介紹了spring學(xué)習(xí)之創(chuàng)建項(xiàng)目 Hello Spring實(shí)例代碼,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01
springboot如何接收application/x-www-form-urlencoded類(lèi)型的請(qǐng)求
這篇文章主要介紹了springboot如何接收application/x-www-form-urlencoded類(lèi)型的請(qǐng)求,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11

