成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

String那些事

gghyoo / 3468人閱讀

摘要:的不可變性眾所周知,是常量,不可變,這一點(diǎn)很重要。那中,包裝類(lèi)的一個(gè)特質(zhì)就是值操作時(shí)體現(xiàn)對(duì)應(yīng)的基本類(lèi)型的特質(zhì)。同樣的,等這些包裝類(lèi)和在這種情況下的表現(xiàn)是相同的。那么無(wú)論你對(duì)傳入?yún)?shù)做了什么操作,都不會(huì)影響原來(lái)的值。

1. String的不可變性

眾所周知,String是常量,不可變,這一點(diǎn)很重要。
其底層的實(shí)現(xiàn)是char[]

    /** The value is used for character storage. */
    private final char value[];

而且,它是final的。

看兩個(gè)構(gòu)造函數(shù):

    /**
     * Initializes a newly created {@code String} object so that it represents
     * the same sequence of characters as the argument; in other words, the
     * newly created string is a copy of the argument string. Unless an
     * explicit copy of {@code original} is needed, use of this constructor is
     * unnecessary since Strings are immutable.
     *
     * @param  original
     *         A {@code String}
     */
    public String(String original) {
        this.value = original.value;
        this.hash = original.hash;
    }

    /**
     * Allocates a new {@code String} so that it represents the sequence of
     * characters currently contained in the character array argument. The
     * contents of the character array are copied; subsequent modification of
     * the character array does not affect the newly created string.
     *
     * @param  value
     *         The initial value of the string
     */
    public String(char value[]) {
        this.value = Arrays.copyOf(value, value.length);
    }

其內(nèi)部的很多方法,也是會(huì)新生成一個(gè)char[]來(lái)構(gòu)造一個(gè)新的String對(duì)象返回。
例如replace:

    /**
     * Returns a new string resulting from replacing all occurrences of
     * oldChar in this string with newChar.
     */
public String replace(char oldChar, char newChar) {
        if (oldChar != newChar) {
            int len = value.length;
            int i = -1;
            char[] val = value; /* avoid getfield opcode */

            while (++i < len) {
                if (val[i] == oldChar) {
                    break;
                }
            }
            if (i < len) {
                char buf[] = new char[len];
                for (int j = 0; j < i; j++) {
                    buf[j] = val[j];
                }
                while (i < len) {
                    char c = val[i];
                    buf[i] = (c == oldChar) ? newChar : c;
                    i++;
                }
                return new String(buf, true);
            }
        }
        return this;
    }

doc中寫(xiě)的很明白,這個(gè)方法,會(huì)新生成一個(gè)String對(duì)象返回。

所以類(lèi)似

str = str.replace("a","b");
str = str.substring(2);
str = str.toLowerCase();

都會(huì)生成新的對(duì)象。原來(lái)的對(duì)象還是存在的,只是沒(méi)有引用指向它,等待被垃圾回收。

2.傳遞String類(lèi)型參數(shù)

看一個(gè)例子:

public class StringTest {
    public static void main(String[] args) {
        StringTest stringTest = new StringTest();
        
        String string = "abc";
        stringTest.replace(string);
        System.out.println(string);

        Integer i = 1;
        stringTest.add(i);
        System.out.println(i);
    }

    public void replace(String string) {
        string = string.replace("a", "b");
        string = string.toUpperCase();
        System.out.println("inner:" + string);
    }

    public void add(Integer integer) {
        integer++;
        System.out.println("inner:" + integer);

    }
}

Stirng內(nèi)部實(shí)現(xiàn)時(shí),是用char[] 來(lái)存儲(chǔ)字符串的,所以String相當(dāng)于char[]的包裝類(lèi)。那java中,包裝類(lèi)的一個(gè)特質(zhì)就是值操作時(shí)體現(xiàn)對(duì)應(yīng)的基本類(lèi)型的特質(zhì)。同樣的,Integer、Float等這些包裝類(lèi)和String在這種情況下的表現(xiàn)是相同的。

分析一下,主要是還是由于包裝類(lèi)內(nèi)部實(shí)現(xiàn)方式導(dǎo)致的。
包裝類(lèi)內(nèi)部存儲(chǔ)結(jié)構(gòu)是final的原生類(lèi)型,或原生類(lèi)型數(shù)組,是不可變的。之后所做的操作都會(huì)新生成一個(gè)對(duì)象來(lái)返回。那么無(wú)論你對(duì)傳入?yún)?shù)做了什么操作,都不會(huì)影響原來(lái)的值。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/65679.html

相關(guān)文章

  • href的那些

    摘要:看個(gè)問(wèn)題此時(shí)的值是什么呢帶著這樣的疑問(wèn),開(kāi)始今天的話題的那些事。問(wèn)題分析為什么會(huì)有這個(gè)問(wèn)題呢上周在項(xiàng)目中,會(huì)對(duì)頁(yè)面標(biāo)簽綁定些事件,會(huì)用到內(nèi)容。總結(jié)寫(xiě)在最后,對(duì)于的事情還不完整,歡迎補(bǔ)充補(bǔ)充。 看個(gè)問(wèn)題test,此時(shí)href的值是什么呢?帶著這樣的疑問(wèn),開(kāi)始今天的話題‘href的那些事’。 問(wèn)題分析 為什么會(huì)有這個(gè)問(wèn)題呢?上周在項(xiàng)目中,msui會(huì)對(duì)頁(yè)面a標(biāo)簽綁定些事件,會(huì)用到href內(nèi)容...

    rose 評(píng)論0 收藏0
  • 淺談隱式類(lèi)型轉(zhuǎn)換與顯示類(lèi)型轉(zhuǎn)換的那些

    摘要:隱式類(lèi)型轉(zhuǎn)換類(lèi)型轉(zhuǎn)類(lèi)型先定義一個(gè)類(lèi)型的變量只要類(lèi)型跟類(lèi)型還是類(lèi)型用號(hào),其他類(lèi)型都會(huì)被轉(zhuǎn)為字符串輸出結(jié)果字符串類(lèi)型轉(zhuǎn)類(lèi)型或者類(lèi)型定義類(lèi)型的變量與類(lèi)型的變量前端從測(cè)試結(jié)果可以看出,類(lèi)型在跟數(shù)字類(lèi)型做乘除減運(yùn)算時(shí),得到的是數(shù)字類(lèi)型的值,但是類(lèi)型必 隱式類(lèi)型轉(zhuǎn)換 number類(lèi)型轉(zhuǎn)string類(lèi)型 //先定義一個(gè)number類(lèi)型的變量 //只要string類(lèi)型跟boolean類(lèi)型還是numbe...

    atinosun 評(píng)論0 收藏0
  • [登錄那些] 郵件發(fā)送,限流,漏桶與令牌桶

    摘要:關(guān)于如何限速,有兩個(gè)比較出名的算法,漏桶算法與令牌桶算法,這里對(duì)其簡(jiǎn)單介紹一下,最后再實(shí)踐在我發(fā)郵件的中以下是發(fā)送郵件的,已限制為一分鐘兩次,你可以通過(guò)修改進(jìn)行試驗(yàn)。 前段時(shí)間,我使用了 jwt 來(lái)實(shí)現(xiàn)郵箱驗(yàn)證碼的校驗(yàn)與用戶(hù)認(rèn)證與登錄,還特別寫(xiě)了一篇文章作為總結(jié)。 在那篇文章中,提到了一個(gè)點(diǎn),如何限速。 在短信驗(yàn)證碼和郵箱驗(yàn)證碼,如果不限速,被惡意攻擊造成大量的 QPS,不僅拖垮了服務(wù)...

    wpw 評(píng)論0 收藏0
  • 【面試】Java基礎(chǔ)的那些-Thr

    摘要:為了提高程序運(yùn)行的效率,在軟件發(fā)布后,檢查默認(rèn)是被關(guān)閉的。注意不能保證原子性,不能代替,且其會(huì)阻止編譯器對(duì)代碼的優(yōu)化。以下方法用來(lái)判斷一個(gè)字符串中是否包含中文字符。 前言 面試中對(duì)于技術(shù)職位,一般分筆試與面談,如果面試官的一些小問(wèn)題你可以立馬找到對(duì)應(yīng)的知識(shí)點(diǎn)擴(kuò)展開(kāi)來(lái),那么這就是你的優(yōu)勢(shì),本系列將講述一些java面試中的事,不會(huì)很詳細(xì),但是應(yīng)該比較全面吧。 主要內(nèi)容 assert有什么作...

    ShowerSun 評(píng)論0 收藏0
  • 微信小程序登錄那些

    摘要:小程序的登錄跟平時(shí)自己這種登錄驗(yàn)證還不太一樣,多了一個(gè)角色,那就是微信服務(wù)器。的有效期默認(rèn)是小時(shí),當(dāng)用戶(hù)一直在使用小程序的話會(huì)自動(dòng)刷新,這個(gè)是由微信這邊來(lái)維護(hù)的。 最近團(tuán)隊(duì)在開(kāi)發(fā)一款小程序,都是新手,一邊看文檔,一邊開(kāi)發(fā)。在開(kāi)發(fā)中會(huì)遇到各種問(wèn)題,今天把小程序登錄這塊的流程整理下,做個(gè)記錄。 小程序的登錄跟平時(shí)自己APP這種登錄驗(yàn)證還不太一樣,多了一個(gè)角色,那就是微信服務(wù)器。 showI...

    kid143 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<