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

Java?String相加底層原理分析

 更新時間:2023年09月16日 08:35:29   作者:LililililililMeng  
這篇文章主要介紹了Java?String相加底層原理,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

Java String相加底層原理

代碼

?? ??? ?String a = "a";
? ? ? ? String b = "b";
? ? ? ? String c = "c";
? ? ? ? String s1 ?= "a"+"b"+"c";
? ? ? ? String s2 = a+b+c;
? ? ? ? System.out.println(s2==s1);
? ? ? ? System.out.println(System.identityHashCode(s1));
? ? ? ? System.out.println(System.identityHashCode(s2));

粗略解釋

首先了解字符串常量池,創(chuàng)建字符串對象分別有兩種,一種是字面值創(chuàng)建,一種是 new 創(chuàng)建,這兩者存儲的內(nèi)存地址是不一樣的。

如果是字面值創(chuàng)建的方式,如 String a="a",JVM會先去字符串常量池中尋找有沒有“a”這個字符串,若有,則將其地址給 a;若沒有,則先在常量池里創(chuàng)建“a”,然后再把地址給a;而通過 new a =  new String("a")的方式創(chuàng)建對象,則是在堆中創(chuàng)建“a”對象,a 指向這個對象。

當(dāng)字符串進(jìn)行拼接時,如果是字面值進(jìn)行拼接,在編譯階段會進(jìn)行優(yōu)化,直接變成字符串”abc“。

當(dāng)字符串變量相加時,因被final修飾,字符串不能修改,會 先生成StringBuilder對象,通過append()方法進(jìn)行字符串拼接,在調(diào)用toString()方法形成新的字符串,所以s1可以理解為 

? ? ? ? StringBuilder stringBuilder = new StringBuilder();
? ? ? ? stringBuilder.append("a");
? ? ? ? stringBuilder.append("b");
? ? ? ? stringBuilder.append("c");
? ? ? ? String s = stringBuilder.toString();

上好的String 相加

//底層底層底層底層底層底層底層底層底層底層底層底層底層底層
//底層底層底層底層底層底層底層底層底層底層底層底層底層底層
//底層底層底層底層底層底層底層底層底層底層底層底層底層底層
//底層底層底層底層底層底層底層底層底層底層底層底層底層底層
//底層底層底層底層底層底層底層底層底層底層底層底層底層底層
//底層底層底層底層底層底層底層底層底層底層底層底層底層底層
//底層底層底層底層底層底層底層底層底層底層底層底層底層底層
//底層底層底層底層底層底層底層底層底層底層底層底層底層底層
return new String(result, 0, len + resultOffset);

兩個String 對象相加,底層先生成一個StringBulider 對象,然后對兩個字符串進(jìn)行append,最后調(diào)用StringBuilder的toString方法進(jìn)行返回 新的String對象 return new String()

            String a="a";
            String b="b";
            String c=a+b;
            String d=new String("ab");
            System.out.println(a+b==c);   //false
            System.out.println((a+b).equals(c));  //ture

調(diào)用equals方法時候,String重寫了equals ,比較的是String的值, 而==比較的是引用的地址的值,所以只要a+b一次就會返回一個新的String對象

看一個新的方法類似

    public static boolean isAdmin(String userId){
        return userId.toLowerCase()=="admin";
    }
    public static void main(String[] args){
        System.out.println(isAdmin("Admin"));
    }

以上代碼返回false  還是一樣底層上面方法返回 new String()

注意注意注意

        String test="javaandpython";
        String str1="java";
        String str2="and";
        String str3="python";
        System. out. println(test=="java"+"and"+"python");
        System. out. println(test ==str1 + str2 + str3);

第一個true  第二個false就不講了,第一個由于是字符串字面量進(jìn)行+操作,編譯階段直接有一個 javaandpython的字符串再常量池中,而不是通過StringBuilder.

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring基于注解配置AOP詳解

    Spring基于注解配置AOP詳解

    這篇文章主要介紹了Spring基于注解配置AOP詳解,Spring 的 AOP 功能是基于 AspectJ 實現(xiàn)的,支持使用注解聲明式定義 AOP 切面,Spring 基于注解配置 AOP 需要啟用 AspectJ 自動代理功能,需要的朋友可以參考下
    2023-09-09
  • Jax-rs規(guī)范下REST接口使用方法詳解

    Jax-rs規(guī)范下REST接口使用方法詳解

    這篇文章主要介紹了Jax-rs規(guī)范下REST接口使用方法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • mybatis?plus中如何編寫sql語句

    mybatis?plus中如何編寫sql語句

    這篇文章主要介紹了mybatis?plus中如何編寫sql語句,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Java計算代碼段執(zhí)行時間的詳細(xì)過程

    Java計算代碼段執(zhí)行時間的詳細(xì)過程

    java里計算代碼段執(zhí)行時間可以有兩種方法,一種是毫秒級別的計算,另一種是更精確的納秒級別的計算,這篇文章主要介紹了java計算代碼段執(zhí)行時間,需要的朋友可以參考下
    2023-02-02
  • 使用springmvc臨時不使用視圖解析器的自動添加前后綴

    使用springmvc臨時不使用視圖解析器的自動添加前后綴

    這篇文章主要介紹了使用springmvc臨時不使用視圖解析器的自動添加前后綴,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • 在Spring使用iBatis及配置講解

    在Spring使用iBatis及配置講解

    今天小編就為大家分享一篇關(guān)于在Spring使用iBatis及配置講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • 如何用注解的方式實現(xiàn)Mybatis插入數(shù)據(jù)時返回自增的主鍵Id

    如何用注解的方式實現(xiàn)Mybatis插入數(shù)據(jù)時返回自增的主鍵Id

    這篇文章主要介紹了如何用注解的方式實現(xiàn)Mybatis插入數(shù)據(jù)時返回自增的主鍵Id,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • 如何解決Idea沒有elementui標(biāo)簽的代碼提示問題

    如何解決Idea沒有elementui標(biāo)簽的代碼提示問題

    這篇文章主要介紹了如何解決Idea沒有elementui標(biāo)簽的代碼提示問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • java二叉樹面試題詳解

    java二叉樹面試題詳解

    下面小編就為大家?guī)硪黄猨ava二叉樹的幾道面試題詳解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2021-07-07
  • 一文搞懂Spring中的JavaConfig

    一文搞懂Spring中的JavaConfig

    這篇文章主要介紹了Spring中的JavaConfig知識,包括事務(wù)注解驅(qū)動,properties配置文件加載方法,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2021-09-09

最新評論

迁西县| 安国市| 旺苍县| 五大连池市| 鲁甸县| 宝山区| 噶尔县| 漳州市| 崇义县| 乐陵市| 龙江县| 阿荣旗| 宁远县| 玉山县| 南京市| 内黄县| 都匀市| 沽源县| 邵东县| 舒城县| 杭锦旗| 鄂托克前旗| 梅河口市| 建德市| 万源市| 平邑县| 固阳县| 金乡县| 年辖:市辖区| 通化市| 南昌市| 伊通| 文山县| 白河县| 齐河县| 荔波县| 田林县| 赣榆县| 措美县| 威海市| 枣阳市|