面試官覺得你基本功扎實(shí)

課代表總結(jié)了String的信息??????
視頻內(nèi)容:
1??String是基本數(shù)據(jù)類型嗎???
2??String可以被繼承嗎?是可變的嗎???
3??String str=""與String str=new String(""i"")—樣嗎????
4??String str = new String("abc");創(chuàng)建了幾個(gè)對(duì)象???
5??String和byte[]兩者之間如何轉(zhuǎn)換???
視頻內(nèi)容:
1??String是基本數(shù)據(jù)類型嗎???
String不是基本數(shù)據(jù)類型,基本類型有8種有int、float、long.double等,而String屬于對(duì)象

2??String可以被繼承嗎?是可變的嗎???
String是final類型的不可基層,也可變,
不可變體現(xiàn)在,例如:String s= "Hello" s += " world!"; s的指向的內(nèi)存起始地址已經(jīng)改變
而自己聲明一個(gè)user對(duì)象,包含name,age屬性,name和age的值改變了,但是聲明的user引I用執(zhí)行的其實(shí)地址是不變的,而String類型的引用執(zhí)行的起始地址會(huì)變化。那么這就是到導(dǎo)致,只要值改變了,String就是新的對(duì)象,造成很大的內(nèi)存開銷,所以就有了StringBuffer和StringBuild
StringBuffer和StringBuilder最大的區(qū)別在于,StringBuffer是線程安全的,而StringBuilder是非線程安全的,但StringBuilder的性能卻高于StringBuffer,所以在單線程環(huán)境下推薦使用StringBuilder,多線程環(huán)境下推薦使用StringBuffer。

3??String str=""與String str=new String(""i"")—樣嗎????
不一樣,因?yàn)閮?nèi)存的分配方式不一樣。String str="i"的方式,Java虛擬機(jī)會(huì)將其分配到常量池中;而String str=new String("i"")則會(huì)被分到堆內(nèi)存中。

4??String str = new String("abc");創(chuàng)建了幾個(gè)對(duì)象???
創(chuàng)建了兩個(gè),"abc"本身創(chuàng)建在常量池,通過new又創(chuàng)建在堆中

5??String和byte[]兩者之間如何轉(zhuǎn)換???
String->byte[]通過String類的getBytes方法; byte[l]->String通過new String(byte[])構(gòu)造器
