日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Java substring方法實現原理解析

瀏覽:100日期:2022-09-02 10:42:55

substring實現原理

String是Java中一個比較基礎的類,每一個開發人員都會經常接觸到。而且,String也是面試中經常會考的知識點。String有很多方法,有些方法比較常用,有些方法不太常用。今天要介紹的subString就是一個比較常用的方法,而且圍繞subString也有很多面試題。

substring(int beginIndex, int endIndex)方法在不同版本的JDK中的實現是不同的。了解他們的區別可以幫助你更好的使用他。為簡單起見,后文中用substring()代表substring(int beginIndex, int endIndex)方法。

substring()的作用

substring(int beginIndex, int endIndex)方法截取字符串并返回其[beginIndex,endIndex-1]范圍內的內容。s

String x = 'abcdef';x = x.substring(1,3);System.out.println(x);

輸出內容:

bc

調用substring時發生了什么?

你可能知道,因為x是不可變的,當使用x.substring(1,3)對x賦值的時候,它會指向一個全新的字符串:

Java substring方法實現原理解析

然而,這個圖不是完全正確的表示堆中發生的事情。因為在jdk6 和 jdk7中調用substring時發生的事情并不一樣。

JDK 6中的subString

tring是通過字符數組實現的。在jdk 6 中,String類包含三個成員變量:char value[], int offset,int count,他們分別用來:存儲真正的字符數組、存儲數組的第一個位置索引、存儲字符串中包含的字符個數。

當調用substring方法的時候,會創建一個新的string對象,但是這個string的值仍然指向堆中的同一個字符數組。這兩個對象中只有count和offset 的值是不同的。

Java substring方法實現原理解析

源碼

//JDK 6String(int offset, int count, char value[]) { this.value = value; this.offset = offset; this.count = count;}public String substring(int beginIndex, int endIndex) { //check boundary return new String(offset + beginIndex, endIndex - beginIndex, value);}

存在的問題

如果有一個很長的字符串,但是你只需要使用很短的一段,于是你使用substring進行切割,但是由于你實際上引用了整個字符串,這個很長的字符串無法被回收。往小了說,造成了存儲空間的浪費,往大了說,可能造成內存泄漏。這個問題已經被官方記錄在Java Bug Database里面了:

Java substring方法實現原理解析

相應的解決辦法:

s1 = s1.substring(x,y) + '';

JDK 7 中的substring

上述問題在JDK 7中得到了解決。JDK 7中,substring方法會在堆中創建一個新的數組。

Java substring方法實現原理解析

源碼

//JDK 7 /** * Allocates a new {@code String} that contains characters from a subarray * of the character array argument. The {@code offset} argument is the * index of the first character of the subarray and the {@code count} * argument specifies the length of the subarray. The contents of the * subarray are copied; subsequent modification of the character array does * not affect the newly created string. * * @param value Array that is the source of characters * @param offset The initial offset * @param count The length * @throws IndexOutOfBoundsException If the {@code offset} and {@code count} arguments index * characters outside the bounds of the {@code value} array */ public String(char value[], int offset, int count) { //check boundary this.value = Arrays.copyOfRange(value, offset, offset + count); } /** * Returns a string that is a substring of this string. The * substring begins at the specified {@code beginIndex} and * extends to the character at index {@code endIndex - 1}. * Thus the length of the substring is {@code endIndex-beginIndex}. * <p> * Examples: * <blockquote><pre> * 'hamburger'.substring(4, 8) returns 'urge' * 'smiles'.substring(1, 5) returns 'mile' * </pre></blockquote> * * @param beginIndex the beginning index, inclusive. * @param endIndex the ending index, exclusive. * @return the specified substring. * @throws IndexOutOfBoundsException if the * {@code beginIndex} is negative, or * {@code endIndex} is larger than the length of * this {@code String} object, or * {@code beginIndex} is larger than * {@code endIndex}. */ public String substring(int beginIndex, int endIndex) { //check boundary int subLen = endIndex - beginIndex; return ((beginIndex == 0) && (endIndex == value.length)) ?this :new String(value, beginIndex, subLen); }

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产亚洲欧美日韩在线观看一区二区| 久久一区二区中文字幕| 亚洲综合精品| 日韩影片在线观看| 亚洲欧美久久精品| 成人在线视频中文字幕| 欧美精品羞羞答答| 国产日本久久| 久久高清一区| 日韩电影二区| 日韩国产成人精品| 伊人精品一区| 久久97久久97精品免视看秋霞| 视频福利一区| 日本特黄久久久高潮| 久久久久久自在自线| 激情偷拍久久| 麻豆高清免费国产一区| 老司机久久99久久精品播放免费| 国产欧美丝祙| 亚洲免费网址| 欧美1区2区3区| 黄色在线观看www| 麻豆91精品91久久久的内涵| 性一交一乱一区二区洋洋av| 久久精品一区二区国产| 亚洲欧美日本国产| 欧美精品一线| 亚洲黑丝一区二区| 日本黄色精品| 麻豆中文一区二区| 久久国内精品视频| 青青草国产精品亚洲专区无| 人人精品人人爱| 久久激情中文| 国产精品久久久久久久久久10秀| 日韩欧美久久| 亚洲欧美一级| 中文无码久久精品| 亚洲一区二区三区在线免费| 999久久久国产精品| 国产福利片在线观看| 欧美精品91| 免费在线观看一区| 麻豆国产欧美一区二区三区| 97久久超碰| 国产探花一区| 久久av免费| 91一区二区三区四区| 国产精品一区二区三区www| 欧美亚洲三区| 国产精品视频一区二区三区| 欧美视频久久| 国产精品日韩精品中文字幕| 国产精品探花在线观看| 久久不见久久见中文字幕免费| 国产精品一区二区三区四区在线观看| 日韩在线网址| 日韩精品福利一区二区三区| 日韩不卡一区二区| 国产精品www994| 精品视频在线观看网站| 四虎成人av| 亚洲激情黄色| 久久午夜精品| 久久精品xxxxx| 国产精品观看| 国产在线看片免费视频在线观看| 日韩国产一区二区三区| 欧美a级一区| 亚洲一级淫片| 精品日韩一区| 亚洲综合国产| 奇米亚洲欧美| 中文字幕在线免费观看视频| 黄色日韩在线| 国产亚洲一区| 成人免费网站www网站高清| 久久精品123| 在线综合欧美| 日本视频在线一区| 日韩免费高清| 亚洲精品美女91| 日本一区二区高清不卡| 亚洲一区二区三区免费在线观看| 日韩一区二区三免费高清在线观看 | 国产成人精品一区二区三区视频| 欧美日韩国产观看视频| 在线视频亚洲| 久久精品国产免费| 欧美资源在线| 国产伊人久久| 国产视频一区欧美| 精品国产午夜肉伦伦影院| 丝袜诱惑制服诱惑色一区在线观看 | 图片区亚洲欧美小说区| 亚洲精品成人一区| 麻豆视频在线观看免费网站黄| 中文亚洲免费| 久久伊人久久| 三级欧美在线一区| 日韩黄色大片网站| 一区二区国产在线观看| 日本少妇一区| 精品一区二区三区中文字幕在线| 在线综合亚洲| 国产高潮在线| 日韩福利视频一区| 午夜久久黄色| 日本欧美不卡| 美女视频黄久久| 91精品在线免费视频| 亚洲女同中文字幕| 色婷婷精品视频| 成人在线黄色| 欧美国产另类| 亚洲精品看片| 香蕉久久夜色精品国产| 成人日韩av| 国产精品一区二区99| 少妇精品久久久一区二区| 好看的av在线不卡观看| 私拍精品福利视频在线一区| 精品国产一区二区三区av片| 国产日韩三级| 日本不卡中文字幕| 日韩精品视频网站| 亚洲日产av中文字幕| 久久香蕉精品| 国产精品毛片在线看| 日韩网站在线| av不卡免费看| 另类av一区二区| 欧美日韩国产欧| 天堂网在线观看国产精品| 香蕉精品视频在线观看| 在线视频日韩| 亚洲精品三级| 国产免费久久| 国产精品qvod| 中文字幕在线看片| 国产精品字幕| 999久久久精品国产| 激情欧美丁香| 爽爽淫人综合网网站| 天堂成人国产精品一区| 99国产精品视频免费观看一公开| 亚洲午夜精品久久久久久app| 成人高清一区| 亚洲天堂一区二区| 亚洲成av人片一区二区密柚| 久久国产日韩| 久久大逼视频| 欧美伊人久久| 久久一区精品| 亚洲精品在线影院| 亚洲黄色影院| 欧美亚洲专区| 国产66精品| 最新日韩av| 青青青国产精品| 国产一区2区| 日韩视频精品在线观看| 视频一区二区三区中文字幕| 国产精品久久久久久久久久妞妞| 久久久久久婷| 国产亚洲福利| 久久超级碰碰| 午夜久久福利| 国产精品色婷婷在线观看| 特黄特色欧美大片| 日韩精品一二三| 免费看久久久| 欧美另类综合| 国产欧美91| 免费黄色成人| 国产日韩欧美中文在线| 成人久久久久| 亚洲欧洲av| 国产白浆在线免费观看| 一区二区国产在线| 欧洲一区二区三区精品| 天堂va欧美ⅴa亚洲va一国产| 免费看av不卡| 日韩二区在线观看| 久久久久久久久丰满| 日韩va亚洲va欧美va久久| 成人自拍av| 国产精品一区二区中文字幕| 黄色成人在线网址| 国产精品久久久久9999高清| 激情欧美日韩一区| 丰满少妇一区| 午夜亚洲一区| 欧美三级网址| 麻豆精品蜜桃视频网站| 亚洲精品影视| 亚洲二区三区不卡| 国产videos久久| 91成人在线|