最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java forEach對原數(shù)組的操作過程

 更新時間:2024年02月07日 10:52:54   作者:chishuiLi  
forEach對于基本數(shù)據(jù)類型,是直接賦值,對于引用數(shù)據(jù)類型,是引用地址值,forEach遍歷時,是創(chuàng)建的臨時變量,引用的數(shù)據(jù)地址,本文給大家介紹Java forEach對原數(shù)組的操作過程,感興趣的朋友一起看看吧

forEach

總結(jié)
forEach對于基本數(shù)據(jù)類型,是直接賦值,對于引用數(shù)據(jù)類型,是引用地址值。

  • 對于基本數(shù)據(jù)類型,forEach不能修改原數(shù)組的值。
  • .對于引用數(shù)據(jù)類型:String,forEach也不能修改原數(shù)組的值,因為String是不可變的。
  • 對于其他引用類型(不被final修飾),forEach能修改具體的屬性,因為forEach是地址引用。

forEach遍歷時,是創(chuàng)建的臨時變量,引用的數(shù)據(jù)地址。
對于基本數(shù)據(jù)類型,int,char,double等,這些值在forEach中進行遍歷操作時,是不能修改的。

@Test
    public void testInt(){
        int[] arr = new int[]{1,2,3,4,5};
        //使用foreach遍歷arr數(shù)組
        for(int i : arr){
            //如果i=2,那么就將i值變?yōu)?
            if(i == 2){
                i = 0;
            }
        }
        //遍歷數(shù)組
        for(int i : arr){
            System.out.print(i + " ");
        }

對于以上代碼,我們預(yù)期輸出是1 0 3 4 5,但是實際輸出是1 2 3 4 5

forEach在遍歷基本數(shù)據(jù)類型是,相當(dāng)于是創(chuàng)建了一個臨時變量i,我們相對數(shù)組元素的修改,實際上都是修改的i值,并不會影響原數(shù)據(jù)
對于引用數(shù)據(jù)類型:
特殊:String類:
對于String類,也是不能修改的,因為String是被final修飾,是不可變的。

 	@Test
    public void testString(){
        String[] strAll = new String[]{"aa","bb","cc"};
        for(String str : strAll){
            if("bb".equals(str)){
                str = "xx";
            }
        }
        for(String str : strAll){
            System.out.print(str + " ");
        }
    }

對于以上代碼,我們預(yù)期輸出是 aa xx cc ,但是實際輸出確實 aa bb cc

開始時內(nèi)存空間解析:

后面str依次指向aa bb cc

當(dāng)指向bb時,他想修改其中的值,但是String是不能被修改的,所以他只能重新去創(chuàng)建一個1,但是原數(shù)組的指向并沒變。,所以最后遍歷踹的原數(shù)組值也是不會改變的。

對于其他引用類:
例如StringBuilder:
需要注意的是,StringBuilder并沒有重寫equals()方法,所以在進行equals比較時,只能轉(zhuǎn)化成String來比較。

@Test
    public void testStringBuilder(){
        StringBuilder[] strBul = new StringBuilder[]{new StringBuilder("111"), new StringBuilder("222"), new StringBuilder("333")};
        for(StringBuilder s : strBul){
            //StringBuilder并沒有重寫equals,所以如果直接調(diào)用的話,它是比較的地址值。
            if("222".equals(s.toString())){
                s.append("aaa");
            }
        }
        for(StringBuilder s : strBul){
            System.out.println(s);
        }

預(yù)期輸出和實際輸出都是 111 222aaa 333

我們自己定義的類:

public class TestForeach {
    Person[] pArr = new Person[]{new Person("張三",18),new Person("李四",20),new Person("王六",10)};
    public void foreachTestPerson(){
        for(Person p : pArr){
            if("王六".equals(p.name)){
                p.age = 100;
            }
        }
        for(Person p : pArr){
            System.out.println(p);
        }
    }
    public static void main(String[] args) {
        new TestForeach().foreachTestPerson();
    }
}
class Person{
    public String name;
    public int age;
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", id=" + age +
                '}';
    }
}

特別需要注意:StringBuilder和StringBuffer都是沒有重寫equals()方法的,不要直接用equals比較!
內(nèi)存解析:
開始時:

修改后,原數(shù)組的地址時沒有變的,所以能修改成功。

到此這篇關(guān)于Java forEach對原數(shù)組的操作過程的文章就介紹到這了,更多相關(guān)java foreach數(shù)組內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Springboot實現(xiàn)驗證碼登錄

    Springboot實現(xiàn)驗證碼登錄

    這篇文章主要為大家詳細(xì)介紹了Springboot實現(xiàn)驗證碼登錄,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • Spring Boot異常處理try-catch應(yīng)該怎么使用?

    Spring Boot異常處理try-catch應(yīng)該怎么使用?

    這篇文章詳細(xì)介紹了Web系統(tǒng)中異常處理的重要性,以及SpringMVC的異常處理機制,解釋了異常在系統(tǒng)中的角色,討論了Java異常模型的關(guān)鍵認(rèn)知,包括Throwable體系結(jié)構(gòu)和異常傳播,強調(diào)了在Web系統(tǒng)中不應(yīng)該到處使用try-catch,而是應(yīng)該在邊界層統(tǒng)一處理異常
    2026-01-01
  • Spring Cloud Config配置文件使用對稱加密的方法

    Spring Cloud Config配置文件使用對稱加密的方法

    Spring Cloud Config提供了兩種加密解密方式,一種是對稱加密,一種是非對稱加密。這篇文章將先展示如何使用對稱加密。感興趣的朋友跟隨腳步之家小編一起學(xué)習(xí)吧
    2018-05-05
  • LangChain4j 集成 SpringBoot的項目實踐

    LangChain4j 集成 SpringBoot的項目實踐

    本文主要介紹了LangChain4j 集成 SpringBoot的項目實踐,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-12-12
  • java打印國際象棋棋盤的方法

    java打印國際象棋棋盤的方法

    這篇文章主要為大家詳細(xì)介紹了java打印出國際象棋棋盤的相關(guān)代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • 模擬簡單Java線程池的方法詳解

    模擬簡單Java線程池的方法詳解

    這篇文章主要為大家詳細(xì)介紹了模擬簡單Java線程池的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • Spring Boot郵箱鏈接注冊驗證及注冊流程

    Spring Boot郵箱鏈接注冊驗證及注冊流程

    這篇文章給大家介紹Spring Boot郵箱鏈接注冊驗證問題及注冊流程分析,通過實例代碼給大家分享實現(xiàn)過程,感興趣的朋友跟隨小編一起看看吧
    2021-07-07
  • Java常見異常全面梳理(含分類+含義+典型場景)

    Java常見異常全面梳理(含分類+含義+典型場景)

    異常是指程序在執(zhí)行過程中,出現(xiàn)的非正常情況,可能由程序員錯誤、系統(tǒng)錯誤或用戶輸入錯誤引起,下面這篇文章主要介紹了Java常見異常全面梳理的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2026-03-03
  • 淺談一下Java中的ReentrantLock

    淺談一下Java中的ReentrantLock

    這篇文章主要介紹了淺談一下Java中的ReentrantLock,這個類是JUC工具包中對線程安全問題提供的一種解決方案,它主要是用來給對象上鎖,保證同一時間這能有一個線程在訪問當(dāng)前對象,需要的朋友可以參考下
    2023-09-09
  • 解決@Validated對List對象驗證失效問題

    解決@Validated對List對象驗證失效問題

    文章指出@Validated注解無法驗證List數(shù)組參數(shù),建議手動逐項驗證或封裝List為對象進行驗證,前者代碼冗余但直接,后者需調(diào)整JSON結(jié)構(gòu)但更簡潔,根據(jù)需求選擇方案,權(quán)衡靈活性與參數(shù)改造成本
    2025-09-09

最新評論

抚宁县| 红河县| 新和县| 林甸县| 永善县| 定边县| 佳木斯市| 固镇县| 宜宾县| 固原市| 宜阳县| 古交市| 聊城市| 天水市| 南康市| 临桂县| 仲巴县| 兰西县| 延吉市| 东海县| 宜良县| 宜阳县| 吉林市| 临沭县| 上饶县| 那坡县| 西畴县| 定边县| 云阳县| 重庆市| 溆浦县| 赤水市| 穆棱市| 大埔区| 永定县| 莱西市| 荥经县| 孟州市| 吕梁市| 理塘县| 平潭县|