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

java String校招面試題過(guò)程詳解

 更新時(shí)間:2019年08月12日 08:27:02   作者:曾聰聰  
這篇文章主要介紹了java String校招面試題過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

面試題一:判斷下列程序運(yùn)行結(jié)果

package String_test;
public class test_1 {
 public static void main(String[] args) {
  String str1 = "HelloWorld";
  String str2 = "HelloWorld";
  String str3 = new String("HelloWorld");
  String str4 = "Hello";
  String str5 = "World";
  String str6 = "Hello" + "World";
  String str7 = str4 + str5;
  System.out.println("str1 == str2 result: " + (str1 == str2)); //1. true
  System.out.println("str1 == str3 result: " + (str1 == str3)); //2. false
  System.out.println("str1 == str6 result: " + (str1 == str6)); //3. true
  System.out.println("str1 == str7 result: " + (str1 == str7)); //4. false
  System.out.println("str1 == str7.intern() result: " + (str1 == str7.intern()));  //5. true
  System.out.println("str3 == str3.intern() result: " + (str3 == str3.intern()));  //6.false
 }
}

畫內(nèi)存圖逐個(gè)的分析每種情況:第一個(gè):str1與str2指向同一個(gè)地址,故相等。

第二個(gè):new代表創(chuàng)建了一個(gè)對(duì)象,str3指向堆內(nèi)存中的引用,故str1與str3指向的地址不同。需要注意的是:字符串常量池中不可能存在兩個(gè)一樣的字符串值,向這里堆內(nèi)存指向的實(shí)際還是運(yùn)行時(shí)常量池中的HelloWorld值

第三個(gè):由于“Hello”與“World”都是常量,用+號(hào)在編譯時(shí)會(huì)被自動(dòng)編譯成String str6 = "HelloWorld",所以兩個(gè)引用都是指向常量池中的地址

第四個(gè):關(guān)鍵點(diǎn)在于理解String str7 = str4+str5。在jdk文檔中有這么一段話

java語(yǔ)言提供了字符串串聯(lián)運(yùn)算符特殊支持( + ),和其他對(duì)象轉(zhuǎn)換為字符串。字符串連接是通過(guò)StringBuilder實(shí)施(或StringBuffer)類及其append方法。字符串的轉(zhuǎn)換是通過(guò)方法toString實(shí)施,由Object和繼承的所有類的java。

可見(jiàn)jvm會(huì)在堆中創(chuàng)建一個(gè)以str4為基礎(chǔ)的StringBuilder對(duì)象,在通過(guò)append方法添加,最后通過(guò)toSting()返回一個(gè)String對(duì)象。故str7指向的還是堆內(nèi)存的對(duì)象而str1指向的是常量池中的地址,兩者指向地址不相同。

第五個(gè):intern方法使用:一個(gè)初始為空的字符串池,它由類String獨(dú)自維護(hù)。當(dāng)調(diào)用 intern方法時(shí),如果池已經(jīng)包含一個(gè)等于此String對(duì)象的字符串(用equals(oject)方法確定),則返回池中的字符串。否則,將此String對(duì)象添加到池中,并返回此String對(duì)象的引用。這里str1指向常量池中的“HelloWorld”對(duì)象,str7.intern():此時(shí)常量池中已經(jīng)有"HelloWorld"字符串值,所以地址指向相同

第六個(gè):str3指向的是堆內(nèi)存,而str3.intern()返回的是常量池中已有字符串“HelloWorld”的引用,故兩者指向地址不同。

面試題二:java中的String為什么設(shè)計(jì)為final類?

1. 允許String對(duì)象緩存hashCode值:在java中String類型是非常常用的,涉及到大量的增刪改查。字符串不變性保證了hashCode的唯一性,這是一種優(yōu)化手段意味著不必每次都去計(jì)算hash值,這也是為什么HashMap建議用String,Integer這種不可變對(duì)象當(dāng)作Key值

2. 字符串常量池需要:java中將字符串值存放在字符串常量池中,如果String對(duì)象是可變的,會(huì)產(chǎn)生很多邏輯錯(cuò)誤,比如改變一個(gè)對(duì)象會(huì)影響到另一個(gè)獨(dú)立對(duì)象。

3. 安全性:網(wǎng)絡(luò)地址的url,文件路徑path通常情況啊下都是用String類型來(lái)保存,如果不是固定不變的可能產(chǎn)生很多安全隱患。

面視題三:有什么辦法可以改變String?

如果問(wèn)了這個(gè)就很尷尬,sun公司特意設(shè)計(jì)的不可變,要強(qiáng)行改變只能通過(guò)反射這種騷操作

package String_test;
import java.lang.reflect.Field;
public class test_2 {
 public static void main(String[] args) throws Exception {
  String str = "王老吉真解渴";
  System.out.println("str=: "+str);
  
  //通過(guò)反射改變獲取內(nèi)部的value字符數(shù)組
  Field field = String.class.getDeclaredField("value");
  field.setAccessible(true);
  field.set(str, new char[]{'加','多','寶','也','解','渴'});
  
  System.out.println("str=: "+str);
 }
}

面試題四:下列代碼創(chuàng)建了幾個(gè)對(duì)象?

String st1 = new String(“abc”);

常量池一個(gè)“abc”對(duì)象,堆中一個(gè)"abc"對(duì)象,總共兩個(gè)。

String st1 = new String(“abc”);
String st2 = new String(“abc”);

3個(gè)對(duì)象。 字符串在常量池中是唯一的,堆內(nèi)存中有兩個(gè),常量池中一個(gè)。

面試題五:談一下String,StringBuilder,StringBuffer的區(qū)別?

1.String類是字符串常量,而StringBuilder與StringBuffer是字符串變量。前者不可變后者可變

2.StringBuilder是非同步的,StringBuffer類的API都套上了一層synchronized同步修飾,所以StringBuffer適合在多線程場(chǎng)景使用(實(shí)際基本不用),StringBuilder類適合單線程使用,它兩用的多的就是append和insert方法

它三的適用場(chǎng)景可以看下知乎:https://www.zhihu.com/question/20101840

小結(jié):

關(guān)于String類和它的成員方法,都是被final修飾的,意味著Strin類不可被繼承。String底層是采用字符數(shù)組對(duì)數(shù)據(jù)進(jìn)行操作的,關(guān)于String的一切操作jdk底層都是會(huì)new一個(gè)新的String對(duì)象,在它的基礎(chǔ)上進(jìn)行操作。所以String是不可變的。

關(guān)于String,基礎(chǔ)性的理論大致就這些,更多的還會(huì)考察字符串的一些算法,這部分也是需要攻克的一個(gè)難點(diǎn)??!

參考鏈接:http://www.dbjr.com.cn/article/102181.htm

參考鏈接:http://www.dbjr.com.cn/article/124070.htm

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • java郵件亂碼的徹底解決方案

    java郵件亂碼的徹底解決方案

    在本篇文章里小編給大家整理的是關(guān)于java郵件亂碼的徹底解決方案,需要的朋友們可以學(xué)習(xí)下。
    2019-12-12
  • SSM如何實(shí)現(xiàn)在Controller中添加事務(wù)管理

    SSM如何實(shí)現(xiàn)在Controller中添加事務(wù)管理

    這篇文章主要介紹了SSM如何實(shí)現(xiàn)在Controller中添加事務(wù)管理,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • idea如何將指定目錄打成jar包

    idea如何將指定目錄打成jar包

    這篇文章主要介紹了idea如何將指定目錄打成jar包問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Java局部?jī)?nèi)部類原理與用法實(shí)例分析

    Java局部?jī)?nèi)部類原理與用法實(shí)例分析

    這篇文章主要介紹了Java局部?jī)?nèi)部類原理與用法,結(jié)合實(shí)例形式分析了Java局部?jī)?nèi)部類功能、用法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2019-09-09
  • java調(diào)用opencv身份證號(hào)識(shí)別詳解

    java調(diào)用opencv身份證號(hào)識(shí)別詳解

    這篇文章主要為大家詳細(xì)介紹了java如何調(diào)用opencv實(shí)現(xiàn)身份證號(hào)的識(shí)別,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-03-03
  • 淺談對(duì)Java雙冒號(hào)::的理解

    淺談對(duì)Java雙冒號(hào)::的理解

    這篇文章主要介紹了淺談對(duì)Java雙冒號(hào)::的理解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • Springboot安全框架整合SpringSecurity實(shí)現(xiàn)方式

    Springboot安全框架整合SpringSecurity實(shí)現(xiàn)方式

    這篇文章主要介紹了Spring全家桶中Springboot安全框架整合SpringSecurity的實(shí)現(xiàn)方式,有需要的朋友可以借鑒參考下,希望可以有所幫助
    2021-09-09
  • 詳解Java實(shí)現(xiàn)設(shè)計(jì)模式之責(zé)任鏈模式

    詳解Java實(shí)現(xiàn)設(shè)計(jì)模式之責(zé)任鏈模式

    責(zé)任鏈模式是一種行為設(shè)計(jì)模式,允許你將請(qǐng)求沿著處理鏈發(fā)送,然后處理者都可對(duì)其進(jìn)行處理,完成后可以再將其傳遞給下一個(gè)處理者。下面將會(huì)舉例說(shuō)明什么是責(zé)任鏈模式,責(zé)任鏈模式該如何使用
    2021-06-06
  • 詳解elasticsearch實(shí)現(xiàn)基于拼音搜索

    詳解elasticsearch實(shí)現(xiàn)基于拼音搜索

    這篇文章主要為大家介紹了詳解elasticsearch實(shí)現(xiàn)基于拼音搜索示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • idea pom導(dǎo)入net.sf.json的jar包失敗的解決方案

    idea pom導(dǎo)入net.sf.json的jar包失敗的解決方案

    JSON(JavaScript Object Notation,JS對(duì)象簡(jiǎn)譜)是一種輕量級(jí)的數(shù)據(jù)交換格式,這篇文章主要介紹了idea pom導(dǎo)入net.sf.json的jar包失敗的解決方案,感興趣的朋友一起看看吧
    2023-11-11

最新評(píng)論