亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術(shù)文章
文章詳情頁

java基礎(chǔ)之String知識總結(jié)

瀏覽:14日期:2022-08-12 10:45:57
目錄一、概念二、特點三、三種構(gòu)造方式:四、字符串常量池一、概念

String代表字符串,java語言中所有雙引號的字符串都是String的對象,不管是否是new出來的對象。

二、特點

1.String類由于被final修飾,因此其不能被繼承,注意一下哈,我開始也以為字符串不能夠改變是因為其被final修飾,事實上并不是這樣,String底層是用char數(shù)組保存,它被final修飾只是不能夠改變地址指向,但是其內(nèi)容是可以改變的。因此字符串不能改變和其是否被final修飾沒有關(guān)系。

2.字符串由于不能被改變,因此其能共享使用。

3.字符串底層使用char[]數(shù)組存儲。

三、三種構(gòu)造方式:

1.public String():創(chuàng)建空字符串對象

2.public String(char[] array):使用char數(shù)組創(chuàng)建字符串

3.public String(byte[] array):使用byte數(shù)組創(chuàng)建字符串,這種方式將對應(yīng)數(shù)字按照ASCII碼轉(zhuǎn)成字符,如97代表字符a一種直接創(chuàng)建:String str = “abc”

四、字符串常量池

在jdk1.6及之前,字符串常量池是在方法區(qū)內(nèi),jdk1.7及之后字符串常量池從方法區(qū)分離出來,存儲在堆中。

jdk1.6和jdk1.7的相同點:

1.用雙引號創(chuàng)建字符串在JVM運行時都直接在字符串常量池中創(chuàng)建字符串對象,但是不會在堆中創(chuàng)建對象;

2.new一個字符串對象(String s = new String(“abc”)),這里面涉及兩個對象的創(chuàng)建,一個是堆對象,一個是字符串常量池中的對象(“abc”是用雙引號的),如果字符串常量池存在與該字符串相同的對象(這里是指內(nèi)容相同,而不是地址)則只需要創(chuàng)建一個堆對象,如果字符串常量池沒有相同的對象,那么需要在字符串常量池和堆內(nèi)都要創(chuàng)建對象,注意一點:這兩個對象之間不存在引用,即其中一個對象保存的值是另一個對象的地址。

String test1 = 'test';String test3 = 'test';String test2 = new String('test'); System.out.println(test1 == test2);//falseSystem.out.println(test1 == test3);//true

第一個輸出是false是因為test1是字符串常量池中的對象,而test2是堆中的對象,因此他們的地址是不相等,故結(jié)果是false;第二個輸出為true是因為當用雙引號創(chuàng)建字符串時,首先會去字符串常量池中查找是否存在值相同得到對象,如果存在就直接返回引用地址,如果不存在才創(chuàng)建對象,因此test1和test3指向的是同一個地址。

jdk1.6和jdk1.7的不同點:

jdk1.6的字符創(chuàng)常量池存儲是對象,jdk1.7字符常量池中既可以存儲對象,又可以存儲對象的引用。

還需要明確一點:使用引號包含文本的方式創(chuàng)建的String對象之間使用“+”連接產(chǎn)生的新對象才會被加入字符串池中,對于所有包含new方式新建對象(包括null)的“+”連接表達式,它所產(chǎn)生的新對象都不會被加入字符串池中

String s6 = new String('go') +new String('od');String s7 = s6.intern();String s8 = 'good';System.out.println(s6 == s7);//trueSystem.out.println(s7 == s8);//trueSystem.out.println(s6 == s8);//true

右上面的介紹可知,s6指向的是堆中字符串good對象的地址,且這個對象沒有在字符串常量池中被創(chuàng)建,當執(zhí)行到 String s7 = s6.intern();時由于字符創(chuàng)常量池沒有這個對象,且堆中存在該對象,因此在字符串常量池中創(chuàng)建一個引用指向堆中的對象,所以s6和s7指向同一個對象,如果是jdk1.6,會直接在字符串常量池創(chuàng)建一個對象然后返回這個對象的引用,此時s6和s7指向的是不同的對象。

String s2 = new String('lo') + new String('ng');String s3 = s2.intern();System.out.println(s2 == s3);//false

這里按照上面的分析應(yīng)該返回true,但是這里返回false,原因如下:

java基礎(chǔ)之String知識總結(jié)

到此這篇關(guān)于java基礎(chǔ)之String知識總結(jié)的文章就介紹到這了,更多相關(guān)Java String內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標簽: Java
相關(guān)文章:
主站蜘蛛池模板: 国产在线精品一区二区三区不卡 | 91在线|亚洲 | 欧美日韩性视频在线 | 70岁老妇女一级毛片爽 | 日日摸夜夜添夜夜添破第一 | 91高清国产经典在线观看 | 男女在线观看啪网站 | 日韩在线视频免费 | 国产一 | 成年免费大片黄在线观看岛国 | 日本一级成人毛片免费观看 | 欧美精品videossex性护士 | 2021成人国产精品 | 美女巨胸喷奶水gif放肆吧 | 丝袜美腿秘书ol在线播放 | 欧美黑人性大免费高清视频 | 久久久精品久久 | 欧美a级影院 | 国产亚洲精品色一区 | 极品美女aⅴ高清在线观看 极品美女一级毛片 | 一级毛片日韩a欧美最爱 | 欧美人拘一级毛片 | 我想看一级黄色大片 | 久久精品国产精品亚洲 | 亚洲欧美日韩在线观看二区 | 中文字幕在线播放一区 | 日韩一级精品视频在线观看 | 久久国产精品老人性 | 目韩一区二区三区系列片丶 | 国产精品v片在线观看不卡 国产精品v在线播放观看 | 欧美韩日在线 | 香港a毛片| 日韩国产欧美在线观看一区二区 | 黄色a一级片| 无码精品日韩中文字幕 | 欧美日韩亚洲精品国产色 | 国产精品一卡二卡三卡 | 欧美毛片一级的免费的 | 亚洲精品午夜级久久久久 | 中文字幕日本不卡一二三区 | 日韩毛片免费看 |