JavaSE 打磨String種種細(xì)節(jié) 避坑指南

前言

細(xì)節(jié)纫溃,是很重要的東西

寫代碼的時(shí)候,一些不經(jīng)意的細(xì)節(jié)韧掩,可以看出一個(gè)人是否優(yōu)雅

比如

注釋

總所周知紊浩,注釋有兩種

// 這是一個(gè)單行注釋

/* 
  這是一段多行注釋
*/

但是其實(shí),注釋還有一種,那就是 注釋文檔

/** 
 *  這是一段文檔注釋坊谁,
 *  你學(xué)會(huì)了嗎
*/

文檔注釋內(nèi)容包含在/** 和 */ 之間费彼,也能注釋多行內(nèi)容,

一般用在類口芍、方法和變量上面箍铲,用來描述其作用。

注釋后鬓椭,鼠標(biāo)放在類和變量上面會(huì)自動(dòng)顯示出我們注釋的內(nèi)容

再比如 命名

  • 包 package 用小寫
  • 類 存放在包中 首字母大寫

今天颠猴,咱們就來打磨打磨String字符串的細(xì)節(jié),看看這里面有多少坑

正文

什么是String類

java.lang.String類代表字符串小染。

Java程序中所有字符串文字都可以被看成實(shí)現(xiàn)此類的實(shí)例翘瓮。

字符串屬于對(duì)象,Java提供了String類來創(chuàng)建和操作對(duì)象裤翩。

  • 只要?jiǎng)?chuàng)建了一個(gè)String對(duì)象就不能再在修改它的值
  • 操作修改某個(gè)字符串的內(nèi)容或長(zhǎng)度资盅,都將返回一個(gè)新的String對(duì)象
  • 字符串即一連串的字符,這些字符都必須包含在一對(duì)英文雙引號(hào)內(nèi)
  • String類為final類踊赠,不能被繼承

細(xì)節(jié)一 判斷字符串相等

我們知道呵扛,判斷相等有兩種意義上的相等,

  • 值相等
  • 地址相等

==

它的作用是判斷兩個(gè)對(duì)象的地址是不是相等筐带。即今穿,判斷兩個(gè)對(duì)象是不是同一個(gè)對(duì)象。

(基本數(shù)據(jù)類型==比較的是值伦籍,引用數(shù)據(jù)類型==比較的是內(nèi)存地址)

equals() :

它的作用也是判斷兩個(gè)對(duì)象是否相等荣赶。但它一般有如下使用情況:

  • 類沒有覆蓋equals()方法。則通過equals()比較該類的兩個(gè)對(duì)象時(shí)鸽斟,等價(jià)于通過“==”比較這兩個(gè)對(duì)象。
  • 類覆蓋了equals()方法利诺。一般富蓄,我們都覆蓋equals()方法來兩個(gè)對(duì)象的內(nèi)容相等;若它們的內(nèi)容相等慢逾,則返回true (即立倍,認(rèn)為這兩個(gè)對(duì)象相等)。
  • String默認(rèn)情況下調(diào)用equals()判斷的是值是否相等侣滩,即內(nèi)容上的相等

接下來我將通過幾個(gè)代碼來演示:

package com.kzb.helloworld;

public class demo {
    public  static void main(String[] args) {
        String s1 = "hello";
        String s2 = "hell" + "o";
        System.out.println("他們內(nèi)容是否是相等的口注?:" + (s1.equals(s2)));
        System.out.println("他們地址是否是相等的?:" + (s1 == s2));
    }
}

很顯然君珠,他們不管內(nèi)容還是地址寝志,都是相等的

因?yàn)椋?/p>

你永遠(yuǎn)可以相信jvm底層,相信Java背后強(qiáng)大的團(tuán)隊(duì)做的優(yōu)化

這里的字符串,沒有用new String()實(shí)例化出來

那么他就會(huì)被創(chuàng)建在字符串常量池材部,但是毫缆,常量池就這么點(diǎn),終不能誰來了都給他建一個(gè)

hello來了建hello hell來了建hell o來建o

····想peach吃呢乐导,肯定是有底層判斷過了苦丁,既然hello有了,既然兩個(gè)最終內(nèi)容都是hello物臂,那就只建一個(gè)吧

再來幾段代碼搞搞各位心態(tài):

package com.kzb.helloworld;

public class demo {
    public  static void main(String[] args) {
//        String s1 = "hello";
        String s2 = "hell" + "o";
//        System.out.println("他們內(nèi)容是否是相等的旺拉?:" + (s1.equals(s2)));
//        System.out.println("他們地址是否是相等的?:" + (s1 == s2));

        String s3 = "hell";
        s3 = s3 + "o";
        System.out.println("s3/s2內(nèi)容是否是相等的棵磷?:" + (s3.equals(s2)));
        System.out.println("s3/s2地址是否是相等的蛾狗?:" + (s3 == s2));

    }
}

納尼,說好的永遠(yuǎn)可以相信jvm底層泽本,相信Java背后強(qiáng)大的團(tuán)隊(duì)做的優(yōu)化

怎么現(xiàn)在不行了

這個(gè)畢竟被初始化過了淘太,你后面再修改,人家也不能預(yù)判到规丽,所以呃你懂的蒲牧。

還沒完,再來段代碼:

package com.kzb.helloworld;

public class demo {
    public  static void main(String[] args) {
        String str1 = "stud";
        String str2 = "I love " + str1;
        String str3 = "I love " + str1;
        System.out.println("str3/str2內(nèi)容是否是相等的赌莺?:" + (str3.equals(str2)));
        System.out.println("str3/str2地址是否是相等的冰抢?:" + (str3 == str2));
//        String s1 = "hello";
//        String s2 = "hell" + "o";
//        System.out.println("他們內(nèi)容是否是相等的?:" + (s1.equals(s2)));
//        System.out.println("他們地址是否是相等的艘狭?:" + (s1 == s2));

//        String s3 = "hell";
//        s3 = s3 + "o";
//        System.out.println("s3/s2內(nèi)容是否是相等的挎扰?:" + (s3.equals(s2)));
//        System.out.println("s3/s2地址是否是相等的?:" + (s3 == s2));
    }
}

Java妙巢音,妙不可言遵倦,

細(xì)品,細(xì)品

絕對(duì)不是我不會(huì)講官撼,咳咳

細(xì)節(jié)二 結(jié)合方法梧躺,傳參

package com.kzb.helloworld;

public class demo {
    public  static void main(String[] args) {

        String a = "Hello world!";
        change(a);
        System.out.println(a);
    }
    public static void  change (String a) {
        a = "no hello world";
    }
}

這個(gè)就很好理解,因?yàn)槭侵祩鬟f傲绣,傳遞的是數(shù)據(jù)內(nèi)容

方法內(nèi)對(duì)這個(gè)值再怎么修改

都不對(duì)原來的變量參數(shù)影響

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末掠哥,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子秃诵,更是在濱河造成了極大的恐慌续搀,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件菠净,死亡現(xiàn)場(chǎng)離奇詭異禁舷,居然都是意外死亡彪杉,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門榛了,熙熙樓的掌柜王于貴愁眉苦臉地迎上來在讶,“玉大人,你說我怎么就攤上這事霜大」共福” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵战坤,是天一觀的道長(zhǎng)曙强。 經(jīng)常有香客問我,道長(zhǎng)途茫,這世上最難降的妖魔是什么碟嘴? 我笑而不...
    開封第一講書人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮囊卜,結(jié)果婚禮上娜扇,老公的妹妹穿的比我還像新娘。我一直安慰自己栅组,他們只是感情好雀瓢,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著玉掸,像睡著了一般刃麸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上司浪,一...
    開封第一講書人閱讀 49,007評(píng)論 1 284
  • 那天泊业,我揣著相機(jī)與錄音,去河邊找鬼啊易。 笑死吁伺,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的租谈。 我是一名探鬼主播箱蝠,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼垦垂!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起牙瓢,我...
    開封第一講書人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤劫拗,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后矾克,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體页慷,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了酒繁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片滓彰。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖州袒,靈堂內(nèi)的尸體忽然破棺而出揭绑,到底是詐尸還是另有隱情,我是刑警寧澤郎哭,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布他匪,位于F島的核電站,受9級(jí)特大地震影響夸研,放射性物質(zhì)發(fā)生泄漏邦蜜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一亥至、第九天 我趴在偏房一處隱蔽的房頂上張望悼沈。 院中可真熱鬧,春花似錦姐扮、人聲如沸絮供。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽杯缺。三九已至,卻和暖如春睡榆,著一層夾襖步出監(jiān)牢的瞬間萍肆,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來泰國打工胀屿, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留塘揣,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓宿崭,卻偏偏與公主長(zhǎng)得像亲铡,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子葡兑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容