大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 Java面試題:java字符串字面量

Java面試題:java字符串字面量

更新時間:2020-04-27 14:13:36 來源:動力節點 瀏覽3176次

    掌握下面的幾點,所有的字符串面試題就不在是什么問題了:

    注:本文以JDK8說明,至于JVM在每個版本的變化會在JVM面試庫中詳細介紹,在這就不展開了。

Java面試題:java字符串字面量

    第一點:字符串創建有兩種方式:字面量和利用new關鍵字

    //1:字面量創建字符串對象

    Stringstr1="abc";

    //2:利用new關鍵字創建字符串對象

    Stringstr2=newString("abc");

    第二點:字符串使用非常的頻繁,從空間和性能方面考慮,JVM實例化字符串時進行了優化:添加了字符串常量池。

    第三點:字符串常量池中的內容是類加載完成以后創建的,而字符串常量池保存的是字符串對象的引用,具體實例對象存放在堆中。

    第四點:如果只是字面量進行拼接,JVM會將它們優化成一個字面量。

    Stringstr="a"+"b";

    //JVM會對上面的拼接進行優化,優化后

    Stringstr="ab";

    第五點:如果拼接中存在字符串變量,JVM會將它們優化成StringBuilder進行拼接,然后通過StringBuilder.toString()獲取。

    Stringstr1="ab";

    Stringstr2=str1+"c";

    //上面字符串拼接存在字符串變量str1,JVM會對其優化

    Stringstr1="ab";

    StringBuildersb=newStringBuilder();

    sb.append(str1).append("c");

    Stringstr2=sb.toString();

    第六點:new關鍵字會在堆上創建一個新的對象。

    第七點:intern()方法:返回常量池該字符串的引用

    intern的作用:

    1:如果字符串常量池中存在字符串對象的引用,則直接返回這個對象的引用

    2:如果字符串常量池中不存在字符串對象的引用,則首先在堆中創建對象,然后將這個對象的引用存放在常量池中。

    上面的這七點如果真正掌握了,我相信下面的面試就很容易了。

    面試1:下面的一句代碼創建了幾個對象

    Stringstr=newString("abc");

    答案:創建了兩個對象。

    解析:此題主要考察了第三點和第六點。

    1)創建的第一個對象(第三點):在類加載時,首先判斷字符串常量中是否存在"abc"對象的引用,沒有則創建一個"abc"對象,然后把這個對象的引用存放在字符串常量池中。

    2)創建的第二個對象(第六點):new關鍵字會在堆中創建一個新的對象。

    面試2:下面的代碼會輸出什么

    Stringstr1="abc";

    Stringstr2="a"+"b"+"c";

    Stringstr3=newString("abc");

    System.out.println(str1==str2);

    System.out.println(str1==str3);

    答案:true,false

    解析:此題主要考察了第三點,第四點和第六點

    1)true:str2在編譯期JVM會優化成"abc",然后判斷字符串常量池中是否存在"abc"對象的引用,因為str1已經創建,所以str2從字符串常量池中獲取"abc"對象的引用。所以str1和str2都是指向同一地址的引用。

    2)false:上面我們知道str1指向的時字符串常量池中"abc"的引用,而str3指向的時newString()創建的新對象的引用,所以str1和str3指向的不是同一個地址的引用。

    面試3:下面的代碼會輸出什么

    Stringstr1="abc";

    Stringstr2="ab";

    Stringstr3=str2+"c";

    System.out.println(str1==str3);

    答案:false

    解析:此題主要考察第三點和第五點

    1)str1指向的時字符串常量池中"abc"對象的引用。

    2)str3在編譯時,JVM會將str3優化成如下代碼。

    StringBuildersb=newStringBuilder();

    sb.append(str2).append("c");

    Stringstr3=sb.toString();

    從上面代碼中可以看出str3指向的時對象StringBuilder()對象的引用,所以str1和str3指向不同對象,所以false.

    面試4:下面代碼會輸出什么

    Stringstr1="abc";

    Stringstr2="ab";

    Stringstr3=(str2+"c").intern();

    System.out.println(str1==str3);

    答案:true

    解析:考察第三點和第七點

    1)如果字符串調用intern()方法,它會查看字符串常量池中是否存在"abc"的引用,存在直接返回它的引用。所以str1和str3指向同一個對象的地址。

    面試5:為什么不要在循環中去拼接字符串

    答案:因為字符串拼接在編譯時期JVM會將其優化成StringBuilder對象進行拼接,如果循環次數非常大的話,創建的StringBuilder對象非常的多,甚至可能會導致內存溢出的情況。

Java面試題:java字符串字面量

 以上就是動力節點java培訓機構的小編針對“Java面試題:java字符串字面量”的內容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 91亚洲国产三上悠亚在线播放 | 伊人精品在线视频 | 国产末成年女av片 | 特黄aa级毛片免费视频播放 | 99热国产这里只有精品 | h片免费看 | 天天透天天干 | 福利视频在线免费观看 | 亚洲国产精品久久久久婷婷老年 | 亚洲男女在线 | 国产精品久久久久影视青草 | 亚洲免费福利 | 免费精品久久久久久中文字幕 | 亚洲小视频在线观看 | 宅男看片午夜大片啪啪mv | 国产精品爱久久久久久久9999 | 97香蕉久久夜色精品国产 | 国产精品天堂 | 亚洲一区中文字幕在线观看 | 国产91精品一区二区麻豆网站 | 久久99亚洲精品久久频 | 国产成人18黄网站麻豆 | 天天操天天看 | 天天骑天天干 | 99久9在线 | 免费 | 国产第一页久久亚洲欧美国产 | 欧美成人免费午夜影视 | 久久77777 | 欧美一二三区视频 | 四虎成人精品在永久免费 | 亚洲成人在线免费观看 | 国内精品伊人久久大香线焦 | www.久久精品视频 | 日韩欧美成末人一区二区三区 | 97成人精品 | 日本色图在线 | 久热re在线视频精品免费 | 97影院网| 国产美女久久久久久久久久久 | 日韩精品中文字幕一区二区三区 | 久久高清一区二区三区 |