Java中比較運(yùn)算符compareTo()、equals()與==的區(qū)別及應(yīng)用總結(jié)
前言
比較運(yùn)算符用于判斷兩個(gè)數(shù)據(jù)的大小,例如:大于、等于、不等于。比較的結(jié)果是一個(gè)布爾值( true 或 false )。
Java 中常用的比較運(yùn)算符如下表所示:
本文主要給大家介紹了關(guān)于Java比較運(yùn)算符compareTo()、equals()與==區(qū)別及應(yīng)用的相關(guān)內(nèi)容,下面話不多說了,來一起看看詳細(xì)的介紹吧
1、== 和 equals的區(qū)別:
==主要是兩個(gè)變量值的比較,返回值為true 或者是false。對(duì)于普通變量,如:int a=10; int b= 10; a==b,返回為 true。
而對(duì)于下面情況:
String a=new String("abc"); String b=new String("abc");
a==b; 返回的則是一個(gè)false。這是因?yàn)椋瑢?duì)于對(duì)象的比較是對(duì)對(duì)象引用的比較,對(duì)于a和b ,他們?cè)趦?nèi)存中對(duì)應(yīng)的地址是不一樣的,所以 a==b 返回的值是一個(gè)false.
==操作符并不涉及對(duì)象內(nèi)容的比較。若要對(duì)對(duì)象內(nèi)容進(jìn)行比較,則用equals. 如果 在本例中,a.equals(b)則返回是一個(gè)true值。
總而言之,==是對(duì)對(duì)象地址的比較,而equals是對(duì)對(duì)象內(nèi)容的比較。對(duì)于基本數(shù)據(jù)類型,一般用==,而對(duì)于字符串的比較,一般用equals
2、對(duì)于compareTo(), 在API中,java.lang包下面的基本數(shù)據(jù)類型的封裝類都提供了該方法,如Integer,Float,Byte,Short,Character 等
在基本數(shù)據(jù)中,compareTo()是比較兩個(gè)Character 對(duì)象;
在 Boolean中,是用boolean的實(shí)例于其它實(shí)例進(jìn)行比較;
在String 中,則是按照字典順序進(jìn)行比較,返回的值是一個(gè)int 型。
貼一段代碼
public class Test{ public static void main(String args[]){ String s1=new String("abc"); String s2=new String("abc"); System.out.println((s1==s2)? "true":"false"); System.out.println((s1.equals(s2))? "true":"false"); if(s1.compareTo(s2)==0){ System.out.println("s1 is equal s2");} s1=s2; System.out.println((s1==s2)? "true":"false"); } }
程序的運(yùn)行結(jié)果為:
false
true
s1 is equals s2
true
這里需要說明的一點(diǎn),s2對(duì)象賦值給s1之后,s2和s1的引用其實(shí)是指向了內(nèi)存中的同一個(gè)位置。所以,再進(jìn)行比較時(shí),就是true.
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
Spring boot GC實(shí)現(xiàn)過程原理解析
這篇文章主要介紹了Spring boot GC實(shí)現(xiàn)過程原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08解決spring懶加載以及@PostConstruct結(jié)合的坑
這篇文章主要介紹了解決spring懶加載以及@PostConstruct結(jié)合的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12springboot整合mybatis-plus代碼生成器的配置解析
這篇文章主要介紹了springboot整合mybatis-plus代碼生成器的配置解析,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02Java實(shí)現(xiàn)抽獎(jiǎng)算法的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何利用Java語(yǔ)言實(shí)現(xiàn)抽獎(jiǎng)算法,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Java有一定幫助,需要的可以參考一下2022-04-04java 使用idea將工程打成jar并創(chuàng)建成exe文件類型執(zhí)行的方法詳解
這篇文章主要介紹了java 使用idea將工程打成jar并創(chuàng)建成exe文件類型執(zhí)行,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2020-09-09Java 多線程并發(fā)AbstractQueuedSynchronizer詳情
這篇文章主要介紹了Java 多線程并發(fā)AbstractQueuedSynchronizer詳情,文章圍繞主題展開想象的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下2022-06-06使用?Spring?Boot?Admin?監(jiān)控應(yīng)用狀態(tài)的詳細(xì)過程
這篇文章主要介紹了使用?Spring?Boot?Admin?監(jiān)控應(yīng)用狀態(tài),該模塊采集應(yīng)用的內(nèi)部信息,并暴露給外部的模塊,支持?HTTP?和?JMX,并可以與一些第三方監(jiān)控系統(tǒng)(如?Prometheus)整合,需要的朋友可以參考下2022-09-09JAVA簡(jiǎn)單工廠模式(從現(xiàn)實(shí)生活角度理解代碼原理)
本文主要介紹了JAVA簡(jiǎn)單工廠模式(從現(xiàn)實(shí)生活角度理解代碼原理)的相關(guān)知識(shí)。具有很好的參考價(jià)值。下面跟著小編一起來看下吧2017-03-03解析探秘fescar分布式事務(wù)實(shí)現(xiàn)原理
這篇文章主要為大家解析探秘fescar分布式事務(wù)的實(shí)現(xiàn)原理,fescar的txc模型實(shí)現(xiàn)非常有研究的價(jià)值,所以今天我們來好好翻一翻fescar項(xiàng)目的代碼2022-02-02