??kotlin的運(yùn)算符“==="我倒是第一次見,不知道別的語言里面有木有撼班。它對”==“的功能地位產(chǎn)生了影響北戏,搞得我有些糊涂被济,特此整理。
一嗡靡、先回顧一下Java里面相應(yīng)的運(yùn)算符的情況
??在Java中有8種基本數(shù)據(jù)類型:
- 浮點(diǎn)型:float(4 byte)
- 雙精度:double(8 byte)
- 整型:byte(1 byte)
- 短整型:short(2 byte)
- 整形:int(4 byte)
- 長整型:long(8 byte)
- 字符型: char(2 byte)
- 布爾型: boolean("true"和"false")
??對于這8種基本數(shù)據(jù)類型的變量,變量直接存儲(chǔ)的是“值”,因此在用關(guān)系操作符==來進(jìn)行比較時(shí)祟印,比較的就是 “值” 本身。舉個(gè)例子:
int a=3;
int b=3;
print(a == b);
??變量a和變量b都是直接存儲(chǔ)的"3"這個(gè)數(shù)值粟害,所以用==比較的時(shí)候結(jié)果是true蕴忆。
??而對于非基本數(shù)據(jù)類型的變量,在一些書籍中稱作為 引用類型的變量悲幅。比如String就是引用類型的變量套鹅,引用類型的變量存儲(chǔ)的并不是 “值”本身站蝠,而是于其關(guān)聯(lián)的對象在內(nèi)存中的地址∽柯梗可以說菱魔,”==“判斷的是兩個(gè)對象是否”引用相等“。而equals方法不能作用于基本數(shù)據(jù)類型的變量吟孙,如果沒有對equals方法進(jìn)行重寫澜倦,則比較的也是引用類型的變量所指向的對象的地址;但是諸如String杰妓、Date等類對equals方法進(jìn)行了重寫藻治,所以它們比較的是所指向的對象的內(nèi)容,可以理解為equals()判斷兩個(gè)對象是否“內(nèi)容相等”稚失。
二栋艳、現(xiàn)在正式聊聊kotlin中的道道兒
??先來一段代碼看看。
var str1 = "chaychan"
var str2 = "chaychan"
println(str1 == str2)
println(str1.equals(str2))
??比較兩個(gè)字符串句各,如果兩個(gè)字符串的內(nèi)容一致吸占,在Java中使用str1 == str2
時(shí),是比較兩個(gè)字符串的地址值凿宾,兩個(gè)字符串的地址不一樣矾屯,將會(huì)返回false,但是在kotlin中初厚,則不是如此件蚕,”==“比較的只是字符串的內(nèi)容,即判斷“內(nèi)容相等”产禾;與此同時(shí)排作,equals()所做的也是判斷“內(nèi)容相等”。如果要判斷對象是否“引用相等”則需要使用“===”亚情。所以妄痪,上述的兩個(gè)判斷結(jié)果都為true。順便提一下楞件,如果你這樣做:println(str1 === str2)
衫生。返回結(jié)果也是true,你并沒有生成兩個(gè)對象土浸。好啦罪针,先寫這些。