免费观看又色又爽又黄的小说免费_美女福利视频国产片_亚洲欧美精品_美国一级大黄大色毛片

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

在比較兩個對象或者數據大小的時候,經常會用到==、compareTo()和equals(),尤其是在接入了Comparable接口后重寫compareTo方法等場景,所以我們來理一下這三個的區別。

目前創新互聯公司已為近1000家的企業提供了網站建設、域名、網絡空間、綿陽服務器托管、企業網站設計、東山網站維護等服務,公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協力一起成長,共同發展。

1.等號"==":

等號是最簡單也最容易理解的,如果等號的兩邊是基本數據類型,比如int,double,那么等號就用來單純的比較他們的數值大小

如果等號兩邊放的是兩個對象,那么就會比較他們在內存當中的地址。

例如:

String a="abc";

String b="abc";

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

答案是:true

因為相同的字符串內容,在地址上是一樣。在Java中,String是有一個String pool的,里面存放了可以共享的字符串對象,在聲明一個String對象后,會首先去找是否存在相同的String內容,如果有的話是不會創建新的對象的。在這里b實際上是引用了a的對象的值,他自己并沒有創建對象,所以這里的答案是true。

但是如果我們接著

String c=new String(“abc”);

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

那答案就是false,因為這二者的地址并不是一致的。

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;

}

可以觀察出,這里實際上是獲取的字符串(也可以是其他對象)的長度,然后作減法,這里的減法就是ASCII碼的減法,所以compareTo()會返回數字,如果兩個字符串內容相同,會返回0,字符串a大于字符串b,會返回相差的ASCII碼的正數,字符串a小于字符串b,會返回相差的ASCII碼的負數。

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

3.equals()

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

public boolean equals(Object anObject) {

if (this == anObject) {

return true;

}無錫知名的婦科醫院 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是先用等號(==)直接來比較兩個對象在內存當中的地址,如果相等會直接返回true,如果這兩個對象的地址不一樣,就會考慮這兩個對象是不是String類型的,如果是String類型的,那先比較兩個字符串長度是否一樣,如果長度不一致,那100%不相等,直接返回false。長度一致則逐個比較

4.compareTo()和equals的區別

compareTo()會返回二者的差值,即返回的是一個數字;而equals就簡單一些,只返回true或者false。

最后,compareTo()和equals()都可以判斷其他基本數據類型,比如說Integer,Java的源碼中對這兩者方法都做了一些重載,可以根據參數的類型去自動匹配相應的方法,他們的原理也非常簡單,只是一些簡單的減法或者(?:)這類判斷。

網站題目:Java中的“==”、“compareTo()”和“equals()”的區別
文章來源:http://m.newbst.com/article6/ijseig.html

成都網站建設公司_創新互聯,為您提供虛擬主機、品牌網站設計ChatGPT企業建站、外貿建站、網站策劃

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都網頁設計公司