亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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)建,這兩者存儲的內存地址是不一樣的。

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

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

當字符串變量相加時,因被final修飾,字符串不能修改,會 先生成StringBuilder對象,通過append()方法進行字符串拼接,在調用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 對象,然后對兩個字符串進行append,最后調用StringBuilder的toString方法進行返回 新的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

調用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就不講了,第一個由于是字符串字面量進行+操作,編譯階段直接有一個 javaandpython的字符串再常量池中,而不是通過StringBuilder.

總結

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

相關文章

  • Java在算法題中的輸入問題實例詳解

    Java在算法題中的輸入問題實例詳解

    在校招筆試中,有的時候我們要自己設計輸入輸出,所以下面這篇文章主要給大家介紹了關于Java在算法題中的輸入問題,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-02-02
  • Java?SE循環(huán)一些基本練習題總結

    Java?SE循環(huán)一些基本練習題總結

    循環(huán)語句可以在滿足循環(huán)條件的情況下,反復執(zhí)行某一段代碼,這段被重復執(zhí)行的代碼被稱為循環(huán)體語句,下面這篇文章主要給大家總結介紹了關于Java?SE循環(huán)一些基本練習題,需要的朋友可以參考下
    2024-03-03
  • 深入理解Java中的構造函數(shù)引用和方法引用

    深入理解Java中的構造函數(shù)引用和方法引用

    java構造函數(shù),也叫構造方法,是java中一種特殊的函數(shù)。函數(shù)名與相同,無返回值。方法引用是用來直接訪問類或者實例的已經(jīng)存在的方法或者構造方法。下面我們來詳細了解一下它們吧
    2019-06-06
  • 如何解決SpringBoot2.x版本對Velocity模板不支持的方案

    如何解決SpringBoot2.x版本對Velocity模板不支持的方案

    這篇文章主要介紹了如何解決SpringBoot2.x版本對Velocity模板不支持的方案,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-12-12
  • Spring Data JPA的作用和用法小結

    Spring Data JPA的作用和用法小結

    Spring Data JPA是Spring框架的一個模塊,它提供了一種數(shù)據(jù)訪問抽象,允許以一種聲明式和簡潔的方式來處理數(shù)據(jù)庫操作,本文主要介紹了Spring Data JPA的作用和用法小結,具有一定的參考價值,感興趣的可以了解一下
    2024-05-05
  • JAVA入門教學之快速搭建基本的springboot(從spring boot到spring cloud)

    JAVA入門教學之快速搭建基本的springboot(從spring boot到spring cloud)

    本文主要入門者介紹怎么搭建一個基礎的springboot環(huán)境,本文通過圖文并茂的形式給大家介紹從spring boot到spring cloud的完美搭建過程,適用java入門教學,需要的朋友可以參考下
    2021-02-02
  • Java代理模式實例分析

    Java代理模式實例分析

    這篇文章主要介紹了Java代理模式,結合實例形式對比分析了java代理模式的使用方法與相關操作技巧,需要的朋友可以參考下
    2019-07-07
  • java核心編程之文件過濾類FileFilter和FilenameFilter

    java核心編程之文件過濾類FileFilter和FilenameFilter

    這篇文章主要為大家詳細介紹了java文件過濾類FileFilter和FilenameFilter,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • SpringBoot項目中使用騰訊云發(fā)送短信的實現(xiàn)

    SpringBoot項目中使用騰訊云發(fā)送短信的實現(xiàn)

    本文主要介紹了SpringBoot項目中使用騰訊云發(fā)送短信的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-04-04
  • Java安全之Mojarra?JSF反序列化講解

    Java安全之Mojarra?JSF反序列化講解

    JSF?和類似的?Web?技術之間的區(qū)別在于?JSF?使用?ViewStates(除了會話)來存儲視圖的當前狀態(tài)(例如,當前應該顯示視圖的哪些部分),這篇文章主要介紹了Java安全之Mojarra?JSF反序列化知識講解,包括漏洞復現(xiàn)和漏洞分析,需要的朋友可以參考下
    2022-11-11

最新評論