欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何區(qū)分JAVA中的equals與==

 更新時(shí)間:2020年06月03日 15:25:58   作者:代碼寫到手抽筋  
這篇文章主要介紹了如何區(qū)分JAVA中的equals與==,文章簡單易懂,實(shí)例代碼幫助大家更好的參考學(xué)習(xí),感興趣的朋友可以了解下

java中的數(shù)據(jù)類型,可分為兩類:

1.基本數(shù)據(jù)類型,也稱原始數(shù)據(jù)類型。

byte,short,char,int,long,float,double,boolean 
他們之間的比較,應(yīng)用雙等號(hào)(==),比較的是他們的值。

基本數(shù)據(jù)類型比較 == 和 Equals 兩者都是比較值;equals()與==都是java中用于進(jìn)行比較的,返回boolean值,不同的是equals()是Object類中定義的一個(gè)方法,==是一個(gè)比較運(yùn)算符。下面是equals()在Object中的源碼:

 public boolean equals(Object obj) 
 { 
 return (this == obj); 
 }

我們驚奇的發(fā)現(xiàn)這方法和==不是一模一樣嗎??

下面再來看看String類中equals()方法的源碼:

public boolean equals(Object anObject)
{ 
//先進(jìn)行地址值的判斷,如果想等直接返回true 
if (this == anObject) 
{ 
return true; 
} 
//如果地址不相等,判斷傳進(jìn)來的對(duì)象是不是String類型的一個(gè)實(shí)例 
if (anObject instanceof String) 
{ 
//發(fā)現(xiàn)是string類型的實(shí)例,將它強(qiáng)轉(zhuǎn)為string類型(強(qiáng)轉(zhuǎn)之后就可以調(diào)用string的方法了) 
String anotherString = (String) anObject; 
//value是string內(nèi)部的一個(gè)char數(shù)組,每個(gè)string對(duì)象都對(duì)應(yīng)一個(gè)char數(shù)組,得到長度 
int n = value.length; 
//先進(jìn)行長度的比較,如果相同才能進(jìn)行下一步 
if (n == anotherString.value.length) 
{ 
//發(fā)現(xiàn)長度相同,將string對(duì)應(yīng)的char數(shù)組中的字符一個(gè)一個(gè)進(jìn)行比較 
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; 
}

顯然String對(duì)equals()方法進(jìn)行了重寫,使得它具有比較String內(nèi)容是否相等的功能,此時(shí)的equals()就不在是僅僅比較對(duì)象地址了,

如果地址不相同,他會(huì)比較對(duì)象內(nèi)容是否相同,如果相同會(huì)返回true。

2.復(fù)合數(shù)據(jù)類型(類) 

當(dāng)他們用(==)進(jìn)行比較的時(shí)候,比較的是他們?cè)趦?nèi)存中的存放地址,所以,除非是同一個(gè)new出來的對(duì)象,他們的比較后的結(jié)果為true,否則比較后結(jié)果為false。

有如下代碼

public class TestString {
 public static void main(String[] args) {
  String s1 = "Monday";
  String s2 = "Monday";
  if (s1 == s2)
 {
  System.out.println("s1 == s2");}
  else{
System.out.println("s1 != s2");}
 }
 }

編譯并運(yùn)行程序,輸出:

s1 == s2

說明:s1 與 s2 引用同一個(gè) String 對(duì)象 -- "Monday"!

改動(dòng)下程序

public class TestString {
public static void main(String[] args) {
String s1 = "Monday";
String s2 = new String("Monday");
if (s1 == s2)
{System.out.println("s1 == s2");}
else
{System.out.println("s1 != s2");}
if (s1.equals(s2)) {System.out.println("s1 equals s2");}
else{
System.out.println("s1 not equals s2");}
}
}

我們將s2用new操作符創(chuàng)建
程序輸出:

s1 != s2
s1 equals s2

說明:s1 s2分別引用了兩個(gè)"Monday"String對(duì)象

總結(jié)如下:

    equals()和==都是用于比較運(yùn)算。

    equals()是Object類中的一個(gè)方法,用于比較對(duì)象是否相等,在Object類中,它的含義和==相同,比較的都是對(duì)象的地址,但有時(shí)我們要比較對(duì)象的內(nèi)容,此時(shí)要重寫equals方法,例如String類就默認(rèn)重寫了equals方法比較對(duì)象的內(nèi)容。

    ==是一個(gè)比較運(yùn)算符,當(dāng)它兩邊是基本數(shù)據(jù)類型時(shí),就是直接比較兩個(gè)數(shù)據(jù)的值,當(dāng)兩邊是對(duì)象時(shí),比較的是對(duì)象的地址。

以上就是如何區(qū)分JAVA中的equals與==的詳細(xì)內(nèi)容,更多關(guān)于JAVA中的equals與==的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 如何使用SpringSecurity保護(hù)程序安全

    如何使用SpringSecurity保護(hù)程序安全

    這篇文章主要介紹了如何使用SpringSecurity保護(hù)程序安全,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Java實(shí)現(xiàn)常見的排序算法代碼實(shí)例

    Java實(shí)現(xiàn)常見的排序算法代碼實(shí)例

    這篇文章主要介紹了Java實(shí)現(xiàn)常見的排序算法代碼實(shí)例,按照思路實(shí)現(xiàn)了以下幾個(gè)排序算法(冒泡排序、直接插入排序、直接選擇排序、快速排序),方便日后用到,特此記錄一下,需要的朋友可以參考下
    2023-11-11
  • Java實(shí)現(xiàn)FIFO、LRU、LFU、OPT頁面置換算法

    Java實(shí)現(xiàn)FIFO、LRU、LFU、OPT頁面置換算法

    本文主要介紹了Java實(shí)現(xiàn)FIFO、LRU、LFU、OPT頁面置換算法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • 快速掌握J(rèn)ava8中的Optional

    快速掌握J(rèn)ava8中的Optional

    Optional 是一個(gè)容器類,代表一個(gè)值存在或不存在,Optional并不是用來替換所有的null,而是為了在設(shè)計(jì)良好的API中更明確地表達(dá)可能缺失的值,這篇文章主要介紹了Java8的Optional及使用,需要的朋友可以參考下
    2023-07-07
  • Java中檢查值是否存在于數(shù)組中的4種詳細(xì)方法

    Java中檢查值是否存在于數(shù)組中的4種詳細(xì)方法

    這篇文章主要給大家介紹了關(guān)于Java中檢查值是否存在于數(shù)組中的4種詳細(xì)方法,相信大家在操作Java的時(shí)候經(jīng)常會(huì)要檢查一個(gè)數(shù)組(無序)是否包含一個(gè)特定的值,需要的朋友可以參考下
    2023-08-08
  • JavaWeb中的Filter過濾器解讀

    JavaWeb中的Filter過濾器解讀

    這篇文章主要介紹了JavaWeb中的Filter過濾器解讀,Filter過濾器是JavaWeb的三大組件之一,Filter過濾器是JavaEE的規(guī)范也就是接口,Filter的作用是攔截請(qǐng)求,過濾響應(yīng),需要的朋友可以參考下
    2023-10-10
  • Java編程實(shí)現(xiàn)五子棋人人對(duì)戰(zhàn)代碼示例

    Java編程實(shí)現(xiàn)五子棋人人對(duì)戰(zhàn)代碼示例

    這篇文章主要介紹了Java編程實(shí)現(xiàn)五子棋人人對(duì)戰(zhàn)代碼示例,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-11-11
  • 聊聊Object類中的wait()和notify()方法

    聊聊Object類中的wait()和notify()方法

    這篇文章主要介紹了Object類中的wait()和notify()方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • spring?boot集成p6spy的最佳實(shí)踐

    spring?boot集成p6spy的最佳實(shí)踐

    這篇文章主要介紹了spring?boot集成p6spy的最佳實(shí)踐-p6spy-spring-boot-starter的項(xiàng)目案例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-02-02
  • SpringBoot詳解Banner的使用

    SpringBoot詳解Banner的使用

    這篇文章主要介紹了超個(gè)性修改SpringBoot項(xiàng)目的啟動(dòng)banner的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07

最新評(píng)論