真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Java中的“==”、“compareTo()”和“equals()”的區(qū)別

在比較兩個(gè)對(duì)象或者數(shù)據(jù)大小的時(shí)候,經(jīng)常會(huì)用到==、compareTo()和equals(),尤其是在接入了Comparable接口后重寫(xiě)compareTo方法等場(chǎng)景,所以我們來(lái)理一下這三個(gè)的區(qū)別。

目前創(chuàng)新互聯(lián)公司已為近1000家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)絡(luò)空間、綿陽(yáng)服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計(jì)、東山網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶(hù)導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶(hù)和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。

1.等號(hào)"==":

等號(hào)是最簡(jiǎn)單也最容易理解的,如果等號(hào)的兩邊是基本數(shù)據(jù)類(lèi)型,比如int,double,那么等號(hào)就用來(lái)單純的比較他們的數(shù)值大小

如果等號(hào)兩邊放的是兩個(gè)對(duì)象,那么就會(huì)比較他們?cè)趦?nèi)存當(dāng)中的地址。

例如:

String a="abc";

String b="abc";

System.out.println(a==b);

答案是:true

因?yàn)橄嗤淖址畠?nèi)容,在地址上是一樣。在Java中,String是有一個(gè)String pool的,里面存放了可以共享的字符串對(duì)象,在聲明一個(gè)String對(duì)象后,會(huì)首先去找是否存在相同的String內(nèi)容,如果有的話(huà)是不會(huì)創(chuàng)建新的對(duì)象的。在這里b實(shí)際上是引用了a的對(duì)象的值,他自己并沒(méi)有創(chuàng)建對(duì)象,所以這里的答案是true。

但是如果我們接著

String c=new String(“abc”);

System.out.println(a==c);

那答案就是false,因?yàn)檫@二者的地址并不是一致的。

2.compareTo()

在Java里觀察compareTo()的源碼

public int compareTo(String anotherString) {

int len1 = value.length;

int len2 = anotherString.value.length;

int lim = Math.min(len1, len2);

char v1[] = value;

char v2[] = anotherString.value;

int k = 0;

while (k < lim) {

char c1 = v1[k];

char c2 = v2[k];

if (c1 != c2) {

return c1 - c2;

}

k++;

}

return len1 - len2;

}

可以觀察出,這里實(shí)際上是獲取的字符串(也可以是其他對(duì)象)的長(zhǎng)度,然后作減法,這里的減法就是ASCII碼的減法,所以compareTo()會(huì)返回?cái)?shù)字,如果兩個(gè)字符串內(nèi)容相同,會(huì)返回0,字符串a(chǎn)大于字符串b,會(huì)返回相差的ASCII碼的正數(shù),字符串a(chǎn)小于字符串b,會(huì)返回相差的ASCII碼的負(fù)數(shù)。

所以 System.out.println(a.compareTo(b))的答案是:0

3.equals()

依舊是來(lái)觀察Java中equals()的源碼

public boolean equals(Object anObject) {

if (this == anObject) {

return true;

}無(wú)錫知名的婦科醫(yī)院 http://www.wxbhnkyy39.com/

if (anObject instanceof String) {

String anotherString = (String)anObject;

int n = value.length;

if (n == anotherString.value.length) {

char v1[] = value;

char v2[] = anotherString.value;

int i = 0;

while (n-- != 0) {

if (v1[i] != v2[i])

return false;

i++;

}

return true;

}

}

return false;

}

可以觀察出,equals是先用等號(hào)(==)直接來(lái)比較兩個(gè)對(duì)象在內(nèi)存當(dāng)中的地址,如果相等會(huì)直接返回true,如果這兩個(gè)對(duì)象的地址不一樣,就會(huì)考慮這兩個(gè)對(duì)象是不是String類(lèi)型的,如果是String類(lèi)型的,那先比較兩個(gè)字符串長(zhǎng)度是否一樣,如果長(zhǎng)度不一致,那100%不相等,直接返回false。長(zhǎng)度一致則逐個(gè)比較

4.compareTo()和equals的區(qū)別

compareTo()會(huì)返回二者的差值,即返回的是一個(gè)數(shù)字;而equals就簡(jiǎn)單一些,只返回true或者false。

最后,compareTo()和equals()都可以判斷其他基本數(shù)據(jù)類(lèi)型,比如說(shuō)Integer,Java的源碼中對(duì)這兩者方法都做了一些重載,可以根據(jù)參數(shù)的類(lèi)型去自動(dòng)匹配相應(yīng)的方法,他們的原理也非常簡(jiǎn)單,只是一些簡(jiǎn)單的減法或者(?:)這類(lèi)判斷。


當(dāng)前題目:Java中的“==”、“compareTo()”和“equals()”的區(qū)別
網(wǎng)頁(yè)鏈接:http://weahome.cn/article/ijseig.html

其他資訊

在線咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部