《阿里巴巴Java開發(fā)手冊(cè)》閱讀手記

一、(四)坏怪、7
【強(qiáng)制】所有的相同類型的包裝類對(duì)象之間值的比較贝润,全部使用equals方法比較。 說(shuō)明:對(duì)于Integer var = ? 在-128至127范圍內(nèi)的賦值铝宵,Integer對(duì)象是在
IntegerCache.cache產(chǎn)生打掘,會(huì)復(fù)用已有對(duì)象,這個(gè)區(qū)間內(nèi)的Integer值可以直接使用==進(jìn)行判斷,但是這個(gè)區(qū)間之外的所有數(shù)據(jù)胧卤,都會(huì)在堆上產(chǎn)生唯绍,并不會(huì)復(fù)用已有對(duì)象,這是一個(gè)大坑枝誊,推薦使用equals方法進(jìn)行判斷况芒。

自己測(cè)試了一下,確實(shí)是這樣的叶撒,好可怕

    @Test
    public void testInteger() {
        //測(cè)試-128 绝骚、127
        Integer var1 = -129;
        Integer var2 = -129;
        Integer var3 = -128;
        Integer var4 = -128;
        Integer var5 = 127;
        Integer var6 = 127;
        Integer var7 = 128;
        Integer var8 = 128;
        // 通過(guò)以下斷言
        assert var1 != var2 : "小于-128,不能使用等等";
        assert var3 == var4 : "等于-128祠够,是不相等的";
        assert var5 == var6 : "等于127压汪,是不相等的";
        assert var7 != var8 : "大于127,是相等的";
        
    }

一古瓤、(四)止剖、10
【強(qiáng)制】序列化類新增屬性時(shí),請(qǐng)不要修改serialVersionUID字段落君,避免反序列失敶┫恪;如果完全不兼容升級(jí)绎速,避免反序列化混亂皮获,那么請(qǐng)修改serialVersionUID值。 說(shuō)明:注意serialVersionUID不一致會(huì)拋出序列化運(yùn)行時(shí)異常纹冤。

  • serialVersionUID 用來(lái)表明類的不同版本間的兼容性

  • 簡(jiǎn)單來(lái)說(shuō)洒宝,Java的序列化機(jī)制是通過(guò)在運(yùn)行時(shí)判斷類的serialVersionUID來(lái)驗(yàn)證版本一致性的。在進(jìn)行反序列化時(shí)萌京,JVM會(huì)把傳來(lái) 的字節(jié)流中的serialVersionUID與本地相應(yīng)實(shí)體(類)的serialVersionUID進(jìn)行比較雁歌,如果相同就認(rèn)為是一致的,可以進(jìn)行反序 列化知残,否則就會(huì)出現(xiàn)序列化版本不一致的異常靠瞎。

  • 當(dāng)實(shí)現(xiàn)java.io.Serializable接口的實(shí)體(類)沒有顯式地定義一個(gè)名為serialVersionUID,類型為long的變 量時(shí)橡庞,Java序列化機(jī)制會(huì)根據(jù)編譯的class自動(dòng)生成一個(gè)serialVersionUID作序列化版本比較用较坛,這種情況下印蔗,只有同一次編譯生成的 class才會(huì)生成相同的serialVersionUID 扒最。

  • 如果我們不希望通過(guò)編譯來(lái)強(qiáng)制劃分軟件版本,即實(shí)現(xiàn)序列化接口的實(shí)體能夠兼容先前版本华嘹,未作更改的類吧趣,就需要顯式地定義一個(gè)名為serialVersionUID,類型為long的變量,不修改這個(gè)變量值的序列化實(shí)體都可以相互進(jìn)行串行化和反串行化强挫。

  • 關(guān)于如果使用SOA服務(wù)岔霸,如果消費(fèi)者如果和提供者依賴的實(shí)體jar包不是一個(gè)版本的話,就可能會(huì)出現(xiàn)不能反序列化俯渤。但是Dubbo默認(rèn)序列化呆细,使用hession,是直接忽略serialVersionUID的八匠。

推薦】循環(huán)體內(nèi)絮爷,字符串的連接方式,使用StringBuilder的append方法進(jìn)行擴(kuò)展梨树。 說(shuō)明:反編譯出的字節(jié)碼文件顯示每次循環(huán)都會(huì)new出一個(gè)StringBuilder對(duì)象坑夯,然后進(jìn)行append操作,最后通過(guò)toString方法返回String對(duì)象抡四,造成內(nèi)存資源浪費(fèi)柜蜈。

我們來(lái)實(shí)際看一下

反編譯字節(jié)碼命令
javap是 Java class文件分解器,可以反編譯指巡,也可以查看java編譯器生成的字節(jié)碼淑履,從而對(duì)代碼內(nèi)部的執(zhí)行邏輯進(jìn)行分析。

用法: javap <options> <classes>
其中, 可能的選項(xiàng)包括:
  -help  --help  -?        輸出此用法消息
  -version                 版本信息
  -v  -verbose             輸出附加信息
  -l                       輸出行號(hào)和本地變量表
  -public                  僅顯示公共類和成員
  -protected               顯示受保護(hù)的/公共類和成員
  -package                 顯示程序包/受保護(hù)的/公共類
                           和成員 (默認(rèn))
  -p  -private             顯示所有類和成員
  -c                       對(duì)代碼進(jìn)行反匯編
  -s                       輸出內(nèi)部類型簽名
  -sysinfo                 顯示正在處理的類的
                           系統(tǒng)信息 (路徑, 大小, 日期, MD5 散列)
  -constants               顯示最終常量
  -classpath <path>        指定查找用戶類文件的位置
  -cp <path>               指定查找用戶類文件的位置
  -bootclasspath <path>    覆蓋引導(dǎo)類文件的位置
##使用javap -c '不帶.class后綴的文件名'
#
  public void testStrppend();
    Code:
       0: ldc           #10                 // String SH
       2: astore_1
       3: iconst_0
       4: istore_2
       5: iload_2
       6: bipush        100
       8: if_icmpge     37
      11: new           #11                 // class java/lang/StringBuilder
      14: dup
      15: invokespecial #12                 // Method java/lang/StringBuilder."<init>":()V
      18: aload_1
      19: invokevirtual #13                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      22: ldc           #14                 // String hello
      24: invokevirtual #13                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      27: invokevirtual #15                 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
      30: astore_1
      31: iinc          2, 1
      34: goto          5
      37: return
把反編譯代碼翻譯一下
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末厌处,一起剝皮案震驚了整個(gè)濱河市鳖谈,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌阔涉,老刑警劉巖缆娃,帶你破解...
    沈念sama閱讀 211,817評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異瑰排,居然都是意外死亡贯要,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門椭住,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)崇渗,“玉大人,你說(shuō)我怎么就攤上這事京郑≌悖” “怎么了?”我有些...
    開封第一講書人閱讀 157,354評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵些举,是天一觀的道長(zhǎng)跟狱。 經(jīng)常有香客問(wèn)我,道長(zhǎng)户魏,這世上最難降的妖魔是什么驶臊? 我笑而不...
    開封第一講書人閱讀 56,498評(píng)論 1 284
  • 正文 為了忘掉前任挪挤,我火速辦了婚禮,結(jié)果婚禮上关翎,老公的妹妹穿的比我還像新娘扛门。我一直安慰自己,他們只是感情好纵寝,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評(píng)論 6 386
  • 文/花漫 我一把揭開白布论寨。 她就那樣靜靜地躺著,像睡著了一般爽茴。 火紅的嫁衣襯著肌膚如雪政基。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,829評(píng)論 1 290
  • 那天闹啦,我揣著相機(jī)與錄音沮明,去河邊找鬼。 笑死窍奋,一個(gè)胖子當(dāng)著我的面吹牛荐健,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播琳袄,決...
    沈念sama閱讀 38,979評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼江场,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了窖逗?” 一聲冷哼從身側(cè)響起址否,我...
    開封第一講書人閱讀 37,722評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎碎紊,沒想到半個(gè)月后佑附,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,189評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡仗考,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評(píng)論 2 327
  • 正文 我和宋清朗相戀三年音同,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片秃嗜。...
    茶點(diǎn)故事閱讀 38,654評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡权均,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出锅锨,到底是詐尸還是另有隱情叽赊,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布必搞,位于F島的核電站必指,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏顾画。R本人自食惡果不足惜取劫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望研侣。 院中可真熱鬧谱邪,春花似錦、人聲如沸庶诡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)末誓。三九已至扯俱,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間喇澡,已是汗流浹背迅栅。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留晴玖,地道東北人读存。 一個(gè)月前我還...
    沈念sama閱讀 46,382評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像呕屎,于是被迫代替她去往敵國(guó)和親让簿。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評(píng)論 2 349

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