1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        五個刁鉆的String面試問題及解答

        共 3623字,需瀏覽 8分鐘

         ·

        2022-06-20 12:02

        來源:blog.csdn.net/u011541946/article/details/79865160


        這篇來看看關(guān)于Java String類的5道面試題,這五道題,我自己在面試過程中親身經(jīng)歷過幾道題目,學完了這篇,我才煥然大悟,才知道為什么是這個答案,本篇就帶你了解這些題的答案為什么是這樣。


        1.判定定義為String類型的st1和st2是否相等,為什么


        package string;
        public class Demo2_String { public static void main(String[] args) { String st1 = "abc"; String st2 = "abc"; System.out.println(st1 == st2); System.out.println(st1.equals(st2)); }}


        輸出結(jié)果:


        第一行:true第二行:true

        分析:


        先看第一個打印語句,在Java中==這個符號是比較運算符,它可以基本數(shù)據(jù)類型和引用數(shù)據(jù)類型是否相等,如果是基本數(shù)據(jù)類型,==比較的是值是否相等,如果是引用數(shù)據(jù)類型,==比較的是兩個對象的內(nèi)存地址是否相等。字符串不屬于8中基本數(shù)據(jù)類型,字符串對象屬于引用數(shù)據(jù)類型,在上面把“abc”同時賦值給了st1和st2兩個字符串對象,指向的都是同一個地址,所以第一個打印語句中的==比較輸出結(jié)果是 true


        然后我們看第二個打印語句中的equals的比較,我們知道,equals是Object這個父類的方法,在String類中重寫了這個equals方法,在JDK API 1.6文檔中找到String類下的equals方法,點擊進去可以看大這么一句話將此字符串與指定的對象比較。當且僅當該參數(shù)不為null,并且是與此對象表示相同字符序列的 String 對象時,結(jié)果才為 true。


        注意這個相同字符序列,在后面介紹的比較兩個數(shù)組,列表,字典是否相等,都是這個邏輯去寫代碼實現(xiàn)。由于st1和st2的值都是“abc”,兩者指向同一個對象,當前字符序列相同,所以第二行打印結(jié)果也為true。


        下面我們來畫一個內(nèi)存圖來表示上面的代碼,看起來更加有說服力。


        內(nèi)存過程大致如下:


        • 運行先編譯,然后當前類Demo2_String.class文件加載進入內(nèi)存的方法區(qū)

        • 第二步,main方法壓入棧內(nèi)存

        • 常量池創(chuàng)建一個“abc”對象,產(chǎn)生一個內(nèi)存地址

        • 然后把“abc”內(nèi)存地址賦值給main方法里的成員變量st1,這個時候st1根據(jù)內(nèi)存地址,指向了常量池中的“abc”。

        • 前面一篇提到,常量池有這個特點,如果發(fā)現(xiàn)已經(jīng)存在,就不在創(chuàng)建重復的對象

        • 運行到代碼 Stringst2 =”abc”, 由于常量池存在“abc”,所以不會再創(chuàng)建,直接把“abc”內(nèi)存地址賦值給了st2

        • 最后st1和st2都指向了內(nèi)存中同一個地址,所以兩者是完全相同的。


        2. 下面這句話在內(nèi)存中創(chuàng)建了幾個對象


        String st1 = new String(“abc”);

        答案是:在內(nèi)存中創(chuàng)建兩個對象,一個在堆內(nèi)存,一個在常量池,堆內(nèi)存對象是常量池對象的一個拷貝副本。


        分析:


        我們下面直接來一個內(nèi)存圖。


        當我們看到了new這個關(guān)鍵字,就要想到,new出來的對象都是存儲在堆內(nèi)存。然后我們來解釋堆中對象為什么是常量池的對象的拷貝副本。“abc”屬于字符串,字符串屬于常量,所以應該在常量池中創(chuàng)建,所以第一個創(chuàng)建的對象就是在常量池里的“abc”。


        第二個對象在堆內(nèi)存為啥是一個拷貝的副本呢,這個就需要在JDK API 1.6找到String(String original)這個構(gòu)造方法的注釋:初始化一個新創(chuàng)建的 String 對象,使其表示一個與參數(shù)相同的字符序列;換句話說,新創(chuàng)建的字符串是該參數(shù)字符串的副本。所以,答案就出來了,兩個對象。


        3.判定以下定義為String類型的st1和st2是否相等


        package string;public class Demo2_String {   public static void main(String[] args) {     String st1 = new String("abc");     String st2 = "abc";     System.out.println(st1 == st2);     System.out.println(st1.equals(st2));   }}

        答案:false 和 true


        由于有前面兩道提內(nèi)存分析的經(jīng)驗和理論,所以,我能快速得出上面的答案。==比較的st1和st2對象的內(nèi)存地址,由于st1指向的是堆內(nèi)存的地址,st2看到“abc”已經(jīng)在常量池存在,就不會再新建,所以st2指向了常量池的內(nèi)存地址,所以==判斷結(jié)果輸出false,兩者不相等。第二個equals比較,比較是兩個字符串序列是否相等,由于就一個“abc”,所以完全相等。內(nèi)存圖如下



        4. 判定以下定義為String類型的st1和st2是否相等


        package string;
        public class Demo2_String {
        public static void main(String[] args) { String st1 = "a" + "b" + "c"; String st2 = "abc"; System.out.println(st1 == st2); System.out.println(st1.equals(st2)); }}

        答案是:true 和 true


        分析:


        “a”,”b”,”c”三個本來就是字符串常量,進行+符號拼接之后變成了“abc”,“abc”本身就是字符串常量(Java中有常量優(yōu)化機制),所以常量池立馬會創(chuàng)建一個“abc”的字符串常量對象,在進行st2=”abc”,這個時候,常量池存在“abc”,所以不再創(chuàng)建。所以,不管比較內(nèi)存地址還是比較字符串序列,都相等。


        5.判斷以下st2和st3是否相等


        package string;
        public class Demo2_String {
        public static void main(String[] args) { String st1 = "ab"; String st2 = "abc"; String st3 = st1 + "c"; System.out.println(st2 == st3); System.out.println(st2.equals(st3)); }}

        答案:false 和 true


        分析:


        上面的答案第一個是false,第二個是true,第二個是true我們很好理解,因為比較一個是“abc”,另外一個是拼接得到的“abc”,所以equals比較,這個是輸出true,我們很好理解。那么第一個判斷為什么是false,我們很疑惑。同樣,下面我們用API的注釋說明和內(nèi)存圖來解釋這個為什么不相等。


        首先,打開JDK API 1.6中String的介紹,找到下面圖片這句話。


        關(guān)鍵點就在紅圈這句話,我們知道任何數(shù)據(jù)和字符串進行加號(+)運算,最終得到是一個拼接的新的字符串。上面注釋說明了這個拼接的原理是由StringBuilder或者StringBuffer類和里面的append方法實現(xiàn)拼接,然后調(diào)用toString()把拼接的對象轉(zhuǎn)換成字符串對象,最后把得到字符串對象的地址賦值給變量。結(jié)合這個理解,我們下面畫一個內(nèi)存圖來分析。


        大致內(nèi)存過程


        • 常量池創(chuàng)建“ab”對象,并賦值給st1,所以st1指向了“ab”

        • 常量池創(chuàng)建“abc”對象,并賦值給st2,所以st2指向了“abc”

        • 由于這里走的+的拼接方法,所以第三步是使用StringBuffer類的append方法,得到了“abc”,這個時候內(nèi)存0x0011表示的是一個StringBuffer對象,注意不是String對象。

        • 調(diào)用了Object的toString方法把StringBuffer對象裝換成了String對象。

        • 把String對象(0x0022)賦值給st3


        所以,st3和st2進行==判斷結(jié)果是不相等,因為兩個對象內(nèi)存地址不同。


        總結(jié)


        這篇的面試題,完全就是要求掌握JDK API中一些注解和原理,以及內(nèi)存圖分析,才能得到正確的結(jié)果,我承認是畫內(nèi)存圖讓我理解了答案為什么是這樣。畫完內(nèi)存圖之后,得到答案,你確實會發(fā)現(xiàn)很有趣,最后才會有原來如此的感嘆。


        *

        最后


        IDEA,Webstorm,Pycharm2022版本最近發(fā)布了,想要早點嘗鮮的小伙伴,可以去下載了。

        ????點擊原文閱讀,可以獲取最新激活。

        瀏覽 36
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            国产1页| 亚洲色成人网站www永久四虎| 成人视频在线免费观看| 青青草在线视频免费观看| 99热这里只有精品1| 亚洲日韩免费观看| 亚洲精品成人无码AV在线| 九九热这里有精品| 免费av播放| 国产老女人操逼视频| 日韩一区二区三免费高清在线观看| AV毛片| 中文字幕精品视频| 亚洲天堂精品在线观看| 啪啪视频免费观看| 91麻豆精品国产| 日本中文字幕不卡| www.18av| 黄色成人在线观看视频| 国产久久性爱| 亚洲欧美在线成人| 欧美老妇BBBBBBBBB| 超碰在线日韩| 91人妻无码一区二区久久| 日本三级片视频不卡| 免费亚洲视频| 午夜国产| 久久av一区二区三区| 囯产精品久久久久久久久久| 亚洲日韩av在线| 欧美一级网站| 国产一级女婬乱免费看| 亚洲精品中文字幕在线观看| 91AV视频在线| 欧美一级欧美三级在线观看| 婷婷丁香色五月| 国产小精品| 俺来也俺去也www色官| 无码专区在线播放| 91精品国产乱码久久| 五月婷网| 国产又粗又大又黄视频| 爱爱视频无码| 91亚色视频| 北条麻纪视频| 亚洲欧美精品AAAAAA片| 国产操屄网| 国产精品乱码毛片在线人与| 日本高清版色视频| 色欲国产精品欧美在线密| 无码高清视频| 黄色视频在线免费看| 男人天堂网站| 免费黄片网站| 亚洲成人无码在线| 18国产免费视频| 欧美日韩黄片| AV解说| 青春草在线视频| 青娱乐精品| 成人无码免费毛片A片| 亚洲熟女少妇| 色综合天天综合网国产成人网 | 自拍偷拍无码| 午夜成人在线| 婷婷在线观看视频| 国产TS丝袜人妖系列视频| 天堂无码在线| 丰满欧美熟妇免费视频| 麻豆精品久久久久久久99蜜桃| 翔田千里无码XXXXXX| 伊人成色| 亚洲91在线| 安徽妇女BBBWBBBwm| 免费a级毛片| 操比视频| 国产午夜福利电影| 最新中文字幕| 日本处女性高潮喷水视频| 中文字幕乱伦性爱| 天天天天毛片| 亚洲无吗在线视频| 啊哈嗯| 日韩无码123区| 亚洲成人视频在线播放| 伊人网导航| 亚洲黄v| 成人三级片网| 狠狠热视频| 一级电影视频去去去| 俺也日| 99精品色| 能看的AV网站| 人人艹人人干| 亚洲成人天堂| 中文字幕亞洲高清手機版第617| 91亚洲成人| 中文人妻第9页| 日本中文字幕在线观看| 色高清无码免费视频| 国产欧美日韩成人| 亚洲精品鲁一鲁一区二区三区| 9l视频自拍蝌蚪9l视频成人| 国产suv精品一区二区6精华液| 成人免费爱爱视频| a免费在线| 精品日逼| 露脸老熟女91集合| 亚洲色图另类| 亚洲精品国产av| AV无码免费观看| 麻豆乱码国产一区二区三区| 亚洲v| 黄色在线欣赏| 影音先锋无码一区| 亚洲AV无码高清| 成人H动漫精品一区二区无码| 国产精品在线免费观看| 国产成人欧美| 日韩人妻码一区二区三区| A片免费播放| 99色综合| 中文字幕无码在线视频| a片在线免费观看| 4虎亚洲人成人网www| 免费的一级A片| 大BBBw大BBBW另类| 91在线无码精品秘入口电车| 午夜福利视频3000| 激情人妻av| 99热在线观看精品免费| 亚洲午夜成人| 无码久久| 极品美女扒开粉嫩小泬高潮一| 88av在线观看| 国产精品毛片VA一区二区三区| 日韩无码一二三区| 91久久人澡人妻人人做人人爽97| 激情综合久久| 日韩爱爱网| 熟女网址| 综合+++夜夜| 特级毛片AAAAAA蜜桃| 97免费在线视频| 国产一区二区不卡亚洲涩情| 乱子伦国产精品视频一级毛| 国产嫩BBwBBw高潮| 国产AⅤ爽aV久久久久成人| 天堂中文字幕在线观看| 一见钟情的韩国电影| 亚洲中文自拍| 丁香六月婷| 老太老熟女城中层露脸60| 欧美日本中文字幕| 夜夜嗨AV一区二区三区| 夜夜操影院| 女生自慰在线观看| 国产乱码精品一区二区三区的特点| 神马午夜激情| 国产高潮又爽又无遮挡又免费| 中日韩特黄A片免费视频| 亚洲你懂的| 国产高清不卡| 欧美日韩视频一区二区三区| 国产成人综合亚洲| 蜜桃人妻无码AV天堂三区 | 亚洲无码一二三区| 福利视频一区| 国产91探花系列在线观看| A视频免费| 国产人体视频| 手机在线观看AV| 乌克兰毛片| 成人视频网| 日本a片免费| 久综合网| 欧美浮力影院| 欧美中出| 日韩黄色一级片| 成人精品A片免费网站| 欧美二区视频| 河南乱子伦视频国产| 色呦呦一区二区三区| 色婷婷色| 亚洲乱码国产乱码精品天美传媒 | 国产第一夜| 人妻精品一区二区| 水蜜桃视频在线观看| 国产精品视频瘾无码| 操逼人妻| 一区二区三区四区五区无码| 日韩肏屄视频| 国产性爱网| 黄片视频链接| 亚州无码精品| 人妻精品在线| 操b在线观看| 日韩欧美不卡色不卡| 九九成人免费视频| 国产一区在线看| 欧美一级特黄A片免费| 日韩欧美网站| 国产欧美一区二区三区国产幕精品| 久久久久无码国产精品一区| 一级黄色免费看| 宅男视频| 国产黄色视频在线观看| 亚洲激情综合视频| 免费日韩无码| 青青草国产亚洲精品久久| 人妖黄片| 久久综合久久鬼色| 手机看片亚洲| 操屄视频在线| 91精品人妻一区二区三区蜜桃| 麻豆福利在线| 中文字幕无码影院| 99久在线精品99re8| 激情操逼| 午夜美女视频| 欧美性猛交XXXXⅩXX| 99这里有精品| 青青草手机在线视频| 黑人AV在线播放| 一本加勒比HEZYO东京热无码| 综合国产| www黄片| 亚洲人成77777| 免费无码一级A片大黄在线观看 | 亚洲手机在线播放| 婷婷五月天网| 人妻在线观看| 西西444WWW无码视频软件功能介绍| 91香蕉国产视频| 2025AV天堂| 一级黄色毛片| 大荫蒂精品另类| 狠狠干伊人| 欧美综合国产| 午夜精品久久久久久久久无码99热| 在线播放亚洲无码| 免费A网站| 男女日逼| 国产一区二区三区四区五区六区七区| 黄色电影一区二区| 国产女人在线观看| 午夜老司机福利| 国产人妖AV| 影音先锋国产资源| 抽插视频欧美| 懂色av蜜臀av粉嫩av分| 欧美亚洲一区二区三区| 特级西西444www大胆免费看| 五月丁香成人电影| 精品无码三级在线观看视频| 91香蕉视频在线播放| 无码日韩成人| 午夜探花在线观看| 人成在线免费视频| 三级片在线观看网站| 国产av播放| 黄片视频在线免费观看| 中文字幕av高清片,中文在线观看 www一个人免费观看视频www | 国产狂喷水潮免费网站www| 欧美大鸡巴在线观看| 躁BBB躁BBB躁BBBBB乃| 亚洲操逼视频| 特级西西WWW无码| 伊人77| 中文字幕免费在线观看| 无码AA| 成人免看一级a一片A片| 成人毛片网| 亚洲天堂AV在线观看| 九色PORNY蝌蚪视频| 免费看性蜜桃| 亚洲精品无码免费| 久草免费电影| 极品小仙女69| 丁香五月天天| 国产偷拍网站| 大香蕉伊人成人网| 国产探花在线观看| 黄色在线免费| 伊人婷婷久久| 午夜福利爱爱视频| 青青草超碰| 成人一级黄色电影| 黑巨茎大战欧美白妞小说| 无码三级| 丁香婷婷综合网| 国产高清一区二区三区| 中文字幕乱码亚洲无线码按摩| 久久成人网豆花视频| 亚洲精品乱码| 欧美性爱a视频| 欧美XXX视频| 一级黄色毛片| 亚洲日韩黄色| 亚洲精品中文字幕无码|