摘要:二調(diào)試過(guò)程經(jīng)過(guò)后發(fā)現(xiàn),在類型數(shù)值比較中使用的是,咋看之下沒(méi)啥問(wèn)題,其實(shí)是有問(wèn)題的在這里為包裝類,是一個(gè)對(duì)象。使用包裝類重寫過(guò)的方法就可以正確對(duì)包裝類型的數(shù)值正確進(jìn)行判斷了。
一、問(wèn)題描述
在一次對(duì)樹形結(jié)構(gòu)的數(shù)據(jù)遍歷中,出現(xiàn)了樹形變亂的問(wèn)題,在此遍歷的ID采用Long類型,在數(shù)值比較中達(dá)到某個(gè)界定值后,樹形結(jié)構(gòu)變形。
二、調(diào)試過(guò)程經(jīng)過(guò)debug后發(fā)現(xiàn),在Long類型數(shù)值比較中使用的是 “==” ,咋看之下沒(méi)啥問(wèn)題,其實(shí)是有問(wèn)題的!在這里L(fēng)ong為包裝類,是一個(gè)對(duì)象。
在這里回顧一下基本的知識(shí)吧:
判斷兩個(gè)對(duì)象是否為同一對(duì)象,是通過(guò)內(nèi)存中地址是否一致為判定的,使用 == 或.equals(obj)即可進(jìn)行判定。
那么為什么一些數(shù)值比如1、2、3、4之類的Long對(duì)象使用==可以正確判斷呢?
在這里我們可以看到Long類型的數(shù)值從-128~127 在一開始已經(jīng)放進(jìn)去了靜態(tài)代碼塊里面的cache數(shù)組里面,
而基本包裝類型在自動(dòng)裝箱成包裝類型的時(shí)候會(huì)從緩存里面取:
可以看到在數(shù)字大于-128 或 小于127的時(shí)候,是直接從cache里面取出來(lái)的,所以在這個(gè)數(shù)值范圍內(nèi)的Long類型對(duì)象是可以直接進(jìn)行比較的,但是超出了這個(gè)范圍,就會(huì)new 新的Long類型,這就導(dǎo)致使用 == 判斷不正確,也就是樹形結(jié)構(gòu)在id超出127后就發(fā)生了變化。使用包裝類重寫過(guò)的equals方法就可以正確對(duì)包裝類型的數(shù)值正確進(jìn)行判斷了。
四、后續(xù)結(jié)語(yǔ)后來(lái)在查看《阿里巴巴java開發(fā)規(guī)范》時(shí)候也看到了:
這些不止是適用于Integer或是Long,所有包裝類都適用。
有些問(wèn)題雖然不大,但是卻是值得我們?nèi)ド钏嫉?。 加油。 :)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/72813.html
摘要:多用戶博客系統(tǒng)該多用戶博客系統(tǒng),是在之前一開始學(xué)習(xí)的使用的時(shí)候,大佬說(shuō)讓去做一個(gè)系統(tǒng)性的項(xiàng)目,這樣前后端兼顧,從里面去系統(tǒng)性的總結(jié)東西,索性就做了一個(gè)這個(gè),項(xiàng)目的架子是根據(jù)一個(gè)開源項(xiàng)目的指導(dǎo)進(jìn)行入坑的,陸陸續(xù)續(xù)用了四個(gè)月時(shí)間,由于是剛步入大 多用戶博客系統(tǒng) 該多用戶博客系統(tǒng),是在之前一開始學(xué)習(xí)node的使用的時(shí)候,大佬說(shuō)讓去做一個(gè)系統(tǒng)性的項(xiàng)目,這樣前后端兼顧,從里面去系統(tǒng)性的總結(jié)東西...
摘要:這一點(diǎn)其實(shí)是非常不妥的,有潛在的安全問(wèn)題。這次,在項(xiàng)目中終于采用了以它為基礎(chǔ)的集群方案。相反,使用一個(gè)周期,但針對(duì)每個(gè)生成一個(gè)一次性的,模擬隨機(jī)發(fā)送。同時(shí),要記得用完之后立即釋放。 當(dāng)初創(chuàng)建簡(jiǎn)書賬號(hào)的時(shí)候曾立下宏愿,希望保持周更,無(wú)奈現(xiàn)實(shí)殘酷,整個(gè)5月都處于忙忙碌碌的狀態(tài),居然令這個(gè)本來(lái)并不算太宏偉的目標(biāo)難以為繼,最終導(dǎo)致5月份交了白卷!【好吧,我承認(rèn),是我意志不夠堅(jiān)定,太懶了,;)】...
摘要:不相等的對(duì)象要具有不相等的哈希碼為了哈希表的操作效率,這一點(diǎn)很重要,但不是強(qiáng)制要求,最低要求是不相等的對(duì)象不能共用一個(gè)哈希碼。方法和方法協(xié)同工作,返回對(duì)象的哈希碼。這個(gè)哈希碼基于對(duì)象的身份生成,而不是對(duì)象的相等性。 本文面向 剛學(xué)完Java的新手們。這篇文章不講語(yǔ)法,而是一些除了語(yǔ)法必須了解的概念。 將要去面試的初級(jí)工程師們。查漏補(bǔ)缺,以免遭遇不測(cè)。 目前由于篇幅而被挪出本文的知識(shí)...
摘要:接收三個(gè)參數(shù)分別為回調(diào)和,其中與是可選參數(shù)。官網(wǎng)釋義排序一個(gè)列表組成一個(gè)組,并且返回各組中的對(duì)象的數(shù)量的計(jì)數(shù)。類似,但是不是返回列表的值,而是返回在該組中值的數(shù)目。 繼續(xù)前面的內(nèi)容,前文我們提到了很多方法的講解,其實(shí)到這里就已經(jīng)差不多了,因?yàn)榇蟛糠执a其實(shí)都是套路,一些基礎(chǔ)函數(shù)再靈活變化就可以組成很多實(shí)用的功能。 _.sortBy = function(obj, iteratee,...
閱讀 897·2021-09-22 15:18
閱讀 1263·2021-09-09 09:33
閱讀 2820·2019-08-30 10:56
閱讀 1263·2019-08-29 16:30
閱讀 1557·2019-08-29 13:02
閱讀 1515·2019-08-26 13:55
閱讀 1702·2019-08-26 13:41
閱讀 2017·2019-08-26 11:56