欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

forEach

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

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

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

@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 + " ");
        }

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

forEach在遍歷基本數(shù)據(jù)類型是,相當(dāng)于是創(chuàng)建了一個(gè)臨時(shí)變量i,我們相對(duì)數(shù)組元素的修改,實(shí)際上都是修改的i值,并不會(huì)影響原數(shù)據(jù)
對(duì)于引用數(shù)據(jù)類型:
特殊:String類:
對(duì)于String類,也是不能修改的,因?yàn)镾tring是被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 + " ");
        }
    }

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

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

后面str依次指向aa bb cc

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

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

@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ù)期輸出和實(shí)際輸出都是 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í):

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

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

相關(guān)文章

  • SpringBoot2.1 RESTful API項(xiàng)目腳手架(種子)項(xiàng)目

    SpringBoot2.1 RESTful API項(xiàng)目腳手架(種子)項(xiàng)目

    這篇文章主要介紹了SpringBoot2.1 RESTful API項(xiàng)目腳手架(種子)項(xiàng)目,用于搭建RESTful API工程的腳手架,只需三分鐘你就可以開始編寫業(yè)務(wù)代碼,不再煩惱于構(gòu)建項(xiàng)目與風(fēng)格統(tǒng)一,感興趣的小伙伴們可以參考一下
    2018-12-12
  • 淺談Java利用表格模型創(chuàng)建表格

    淺談Java利用表格模型創(chuàng)建表格

    這篇文章主要介紹了Java利用表格模型創(chuàng)建表格,需要的朋友可以參考下
    2017-09-09
  • 教你通過B+Tree平衡多叉樹理解InnoDB引擎的聚集和非聚集索引

    教你通過B+Tree平衡多叉樹理解InnoDB引擎的聚集和非聚集索引

    大家都知道B+Tree是從二叉樹演化而來(lái),在這之前我們來(lái)先了解二叉樹、平衡二叉樹、平衡多叉樹,這篇文章主要介紹了通過B+Tree平衡多叉樹理解InnoDB引擎的聚集和非聚集索引,需要的朋友可以參考下
    2022-01-01
  • SpringBoot基于redis自定義注解實(shí)現(xiàn)后端接口防重復(fù)提交校驗(yàn)

    SpringBoot基于redis自定義注解實(shí)現(xiàn)后端接口防重復(fù)提交校驗(yàn)

    本文主要介紹了SpringBoot基于redis自定義注解實(shí)現(xiàn)后端接口防重復(fù)提交校驗(yàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • spring.profiles.active配置使用小結(jié)

    spring.profiles.active配置使用小結(jié)

    spring.profiles.active?配置使得應(yīng)用程序能夠在不同的環(huán)境中使用不同的配置,本文主要介紹了spring.profiles.active配置使用小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-07-07
  • Java實(shí)現(xiàn)定時(shí)任務(wù)的示例代碼

    Java實(shí)現(xiàn)定時(shí)任務(wù)的示例代碼

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)定時(shí)任務(wù)的相關(guān)知識(shí),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-11-11
  • SpringAop @Around執(zhí)行兩次的原因及解決

    SpringAop @Around執(zhí)行兩次的原因及解決

    這篇文章主要介紹了SpringAop @Around執(zhí)行兩次的原因及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java連接SqlServer錯(cuò)誤的完美解決方法

    Java連接SqlServer錯(cuò)誤的完美解決方法

    我們?cè)谧鯦ava或者C#連接數(shù)據(jù)庫(kù)的時(shí)候,常常遇到連接SqlServer失敗的問題,明明檢查了好幾遍代碼沒問題了,還是連接不上,下面這篇文章主要給大家介紹了關(guān)于Java連接SqlServer錯(cuò)誤的完美解決方法,需要的朋友可以參考下
    2023-04-04
  • Java實(shí)現(xiàn)把圖片處理到指定大小的操作方法

    Java實(shí)現(xiàn)把圖片處理到指定大小的操作方法

    項(xiàng)目開發(fā)中,經(jīng)常遇到圖片上傳功能,發(fā)現(xiàn)如果圖片比較大時(shí),在查看、預(yù)覽、下載速度會(huì)特別慢,考慮到浪費(fèi)流量以及文件服務(wù)器的存儲(chǔ)空間,決定在后端優(yōu)化處理完再上傳,所以本文給大家介紹了使用Java把圖片處理到指定大小的操作方法,需要的朋友可以參考下
    2025-03-03
  • mybatis-plus @select動(dòng)態(tài)查詢方式

    mybatis-plus @select動(dòng)態(tài)查詢方式

    這篇文章主要介紹了mybatis-plus @select動(dòng)態(tài)查詢方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05

最新評(píng)論