Java中 ==、equals() 、equalsIgnoreCase() 和compareTo() 方法區(qū)別對比詳解
== 運(yùn)算符
== 運(yùn)算符是Java中用于比較兩個(gè)操作數(shù)是否相等的運(yùn)算符。它可以用于比較基本數(shù)據(jù)類型和對象類型。
1、對于基本數(shù)據(jù)類型:== 比較的是兩個(gè)操作數(shù)的值是否相等。如果兩個(gè)操作數(shù)的值相等,則返回 true,否則返回 false。
public class main {
public static void main(String[] args) {
String str1 = new String("Hello");
String str2 = new String("Hello");
System.out.println(str1 == str2); // false
String str3 = str1;
System.out.println(str1 == str3); // true
}
}2、對于對象類型:== 比較的是兩個(gè)操作數(shù)的引用地址是否相等,即它們是否引用同一個(gè)對象。如果兩個(gè)操作數(shù)引用同一個(gè)對象,則返回 true,否則返回 false。
public class main {
public static void main(String[] args) {
String str1 = new String("Hello");
String str2 = new String("Hello");
System.out.println(str1 == str2); // false
String str3 = str1;
System.out.println(str1 == str3); // true
}
}總結(jié):
- == 運(yùn)算符用于比較操作數(shù)的值(對于基本數(shù)據(jù)類型)或引用地址(對于對象類型)是否相等。
- 對于基本數(shù)據(jù)類型,比較的是它們的值。
- 對于對象類型,比較的是它們的引用地址,即是否引用同一個(gè)對象。
equals() 方法
equals() 方法是Java中用于比較兩個(gè)對象內(nèi)容是否相等的方法。它是Object類中定義的方法,因此所有的Java類都繼承了這個(gè)方法。默認(rèn)情況下,equals() 方法與== 運(yùn)算符的行為相同,比較的是兩個(gè)對象的引用地址。
然而,很多類會重寫equals() 方法以實(shí)現(xiàn)自定義的相等比較邏輯。例如,String類、Integer類等都重寫了equals() 方法來比較對象的內(nèi)容而不是引用地址。
equals() 方法的通用語法如下:
public boolean equals(Object obj) {
// 相等比較邏輯的實(shí)現(xiàn)
}在重寫equals() 方法時(shí),通常需要滿足以下幾個(gè)原則:
- 自反性:對于任意非空引用值x,x.equals(x) 應(yīng)該返回true。
- 對稱性:對于任意非空引用值x 和 y,如果x.equals(y) 返回true,那么 y.equals(x) 也應(yīng)該返回true。
- 傳遞性:對于任意非空引用值x、y 和 z,如果x.equals(y) 返回true,并且y.equals(z) 也返回true,那么x.equals(z) 也應(yīng)該返回true。
- 一致性:對于任意非空引用值x 和 y,多次調(diào)用x.equals(y) 應(yīng)該始終返回相同的結(jié)果。
- 非空性:對于任意非空引用值x,x.equals(null) 應(yīng)該返回false。
以下是一個(gè)示例,展示了如何重寫equals() 方法:
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}
Person person = (Person) obj;
return age == person.age && name.equals(person.name);
}
public static void main(String[] args) {
Person person1 = new Person("Alice", 25);
Person person2 = new Person("Alice", 25);
Person person3 = new Person("Bob", 30);
System.out.println(person1.equals(person2)); // true
System.out.println(person1.equals(person3)); // false
}
}在上述示例中,我們重寫了equals() 方法來比較Person類的兩個(gè)對象。我們自定義了相等比較的邏輯,即如果兩個(gè)對象的name 和 age 相等,則認(rèn)為它們相等。盡管person1 和 person2 是兩個(gè)不同的對象,但由于它們的內(nèi)容相等,因此調(diào)用equals() 方法會返回true。
總結(jié):
- equals() 方法用于比較兩個(gè)對象的內(nèi)容是否相等。
- 默認(rèn)情況下,equals() 方法與== 運(yùn)算符的行為相同,比較的是兩個(gè)對象的引用地址。
- 通常需要重寫equals() 方法來實(shí)現(xiàn)自定義的相等比較邏輯。
- 在重寫equals() 方法時(shí),需要滿足自反性、對稱性、傳遞性、一致性和非空性等原則。
equalsIgnoreCase() 方法
equalsIgnoreCase() 方法是Java中用于比較兩個(gè)字符串內(nèi)容是否相等(忽略大小寫)的方法。它是String類中定義的方法,用于在不考慮大小寫的情況下比較字符串。
equalsIgnoreCase() 方法的通用語法如下:
public boolean equalsIgnoreCase(String anotherString) {
// 忽略大小寫的相等比較邏輯的實(shí)現(xiàn)
}
使用equalsIgnoreCase() 方法進(jìn)行字符串比較時(shí),它會先將兩個(gè)字符串都轉(zhuǎn)換為小寫(或大寫),然后比較轉(zhuǎn)換后的字符串是否相等,忽略大小寫差異。
以下是一個(gè)示例,展示了如何使用equalsIgnoreCase() 方法進(jìn)行字符串比較:
public class main {
public static void main(String[] args) {
String str1 = "Hello";
String str2 = "hello";
String str3 = "WORLD";
System.out.println(str1.equalsIgnoreCase(str2)); // true
System.out.println(str1.equalsIgnoreCase(str3)); // false
}
}在上述示例中,我們使用equalsIgnoreCase() 方法比較了三個(gè)字符串的內(nèi)容。盡管str1 和 str2 的大小寫不同,但由于忽略了大小寫差異,因此調(diào)用equalsIgnoreCase() 方法會返回true。而str1 和 str3 的大小寫不同,并且大小寫敏感,所以調(diào)用equalsIgnoreCase() 方法會返回false。
總結(jié):
- equalsIgnoreCase() 方法用于比較兩個(gè)字符串內(nèi)容是否相等,忽略大小寫差異。
- 它會將兩個(gè)字符串都轉(zhuǎn)換為小寫(或大寫),然后比較轉(zhuǎn)換后的字符串是否相等。
- equalsIgnoreCase() 方法是String類中定義的方法,可以直接使用。
- 通過equalsIgnoreCase() 方法進(jìn)行字符串比較時(shí),可以忽略大小寫的差異,使得比較更加靈活。
compareTo() 方法
compareTo() 方法是Java中用于比較兩個(gè)字符串的大小關(guān)系的方法。它是Comparable接口中定義的方法,String類實(shí)現(xiàn)了Comparable接口,因此可以直接使用compareTo() 方法來比較字符串的大小關(guān)系。
compareTo() 方法的通用語法如下:
public int compareTo(String anotherString) {
// 字符串大小關(guān)系比較邏輯的實(shí)現(xiàn)
}
compareTo() 方法比較的規(guī)則是基于字典順序進(jìn)行的,它會逐個(gè)比較兩個(gè)字符串對應(yīng)位置上的字符的Unicode值。具體規(guī)則如下:
- 如果兩個(gè)字符串在所有位置上的對應(yīng)字符的Unicode值相等,則返回0。
- 如果在某個(gè)位置上,調(diào)用compareTo() 方法的字符串的字符的Unicode值大于參數(shù)字符串的字符的Unicode值,則返回一個(gè)正數(shù)。
- 如果在某個(gè)位置上,調(diào)用compareTo() 方法的字符串的字符的Unicode值小于參數(shù)字符串的字符的Unicode值,則返回一個(gè)負(fù)數(shù)。
具體可查看此表,

以下是一個(gè)示例,展示了如何使用compareTo() 方法進(jìn)行字符串大小關(guān)系的比較:
public class main {
public static void main(String[] args) {
String str1 = "apple";
String str2 = "banana";
String str3 = "apple";
System.out.println(str1.compareTo(str2)); // 返回一個(gè)負(fù)數(shù) -1
System.out.println(str2.compareTo(str1)); // 返回一個(gè)正數(shù) 1
System.out.println(str1.compareTo(str3)); // 返回0
}
}在上述示例中,我們使用compareTo() 方法比較了三對字符串的大小關(guān)系。根據(jù)字典順序,"apple" 在 "banana" 之前,因此調(diào)用str1.compareTo(str2) 返回一個(gè)負(fù)數(shù);而 "banana" 在 "apple" 之后,因此調(diào)用str2.compareTo(str1) 返回一個(gè)正數(shù);而 "apple" 和 "apple" 相等,因此調(diào)用str1.compareTo(str3) 返回0。
總結(jié):
- compareTo() 方法用于比較兩個(gè)字符串的大小關(guān)系。
- 它基于字典順序進(jìn)行比較,逐個(gè)比較兩個(gè)字符串對應(yīng)位置上的字符的Unicode值。
- compareTo() 方法是Comparable接口中定義的方法,String類實(shí)現(xiàn)了Comparable接口,因此可以直接使用。
- 通過compareTo() 方法進(jìn)行字符串比較時(shí),可以獲得字符串的大小關(guān)系,便于排序和查找操作。
對比總結(jié)
1、== 操作符:
- 用于判斷兩個(gè)對象的引用是否相同,即判斷兩個(gè)對象是否指向內(nèi)存中的同一塊地址。
- 在比較字符串時(shí),== 操作符比較的是兩個(gè)字符串對象的引用是否相同,而不是內(nèi)容是否相等。
2、equals() 方法:
- 用于比較兩個(gè)對象的內(nèi)容是否相等,對于字符串來說,比較的是字符串的字符序列是否相同。
- 在 String 類中,equals() 方法被重寫,用于比較字符串對象的內(nèi)容是否相等。
3、equalsIgnoreCase() 方法:
- 與 equals() 方法類似,用于比較兩個(gè)字符串的內(nèi)容是否相等,但會忽略大小寫的差異。
- 例如,"hello" 和 "Hello" 在使用 equalsIgnoreCase() 方法進(jìn)行比較時(shí)會被視為相等。
4、compareTo() 方法:
- 用于比較兩個(gè)字符串的大小關(guān)系,返回一個(gè)整數(shù)值。
- 如果兩個(gè)字符串相等,返回 0;如果調(diào)用字符串按字典順序排列在參數(shù)字符串之前,返回負(fù)數(shù);如果調(diào)用字符串按字典順序排列在參數(shù)字符串之后,返回正數(shù)。
總結(jié):
- == 用于比較引用是否相同。
- equals() 用于比較內(nèi)容是否相等。
- equalsIgnoreCase() 也用于比較內(nèi)容是否相等,但會忽略大小寫差異。
- compareTo() 用于比較大小關(guān)系。
到此這篇關(guān)于Java 中 Comparator 的使用方法案例詳解的文章就介紹到這了,更多相關(guān)java comparator用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Java中==和equals()的區(qū)別總結(jié)
- Java中的==和equals()區(qū)別小結(jié)
- Java ==,equals()與hashcode()的使用
- 詳解Java中==和equals()的區(qū)別
- java中“==“和equals()的區(qū)別詳解
- 詳解java==運(yùn)算符和equals()方法的區(qū)別
- Java中比較運(yùn)算符compareTo()、equals()與==的區(qū)別及應(yīng)用總結(jié)
- Java中equalsIgnoreCase()方法的使用
- Java中BigDecimal比較大小的3種方法(??compareTo()、??equals()??和??compareTo()??)
相關(guān)文章
java中@JsonValue和@JsonCreator使用
本文主要介紹了java中@JsonValue和@JsonCreator使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-06-06
springboot調(diào)用支付寶第三方接口(沙箱環(huán)境)
這篇文章主要介紹了springboot+調(diào)用支付寶第三方接口(沙箱環(huán)境),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10
Mybatis中foreach標(biāo)簽帶來的空格\換行\(zhòng)回車問題及解決方案
這篇文章主要介紹了解決Mybatis中foreach標(biāo)簽帶來的空格,換行,回車問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04
spring cloud-給Eureka Server加上安全的用戶認(rèn)證詳解
這篇文章主要介紹了spring cloud-給Eureka Server加上安全的用戶認(rèn)證詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-01-01
SpringCloud Nacos作為配置中心超詳細(xì)講解
這篇文章主要介紹了Springcloud中的Nacos作為配置中心,本文以用戶微服務(wù)為例,進(jìn)行統(tǒng)一的配置,結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-12-12

