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

java equals和==的區(qū)別詳解

 更新時(shí)間:2016年10月22日 09:17:39   投稿:lqh  
這篇文章主要介紹了java equals和==的區(qū)別詳解的相關(guān)資料,需要的朋友可以參考下

 大概說equals和==都比較的是什么:

  1. boolean tem = a == b;

  首先==比較的肯定是地址,從堆棧的角度說也就是說==比較的是棧上面的內(nèi)容。因?yàn)闂J怯脕泶娣诺刂坊蚴莏ava中八大基本類型中自動(dòng)變量的字面值(自動(dòng)變量就是用int a = 1;這種形式來定義的變量)。如果是自動(dòng)變量比較值的話肯定是用==來比較,因?yàn)閑quals()是一個(gè)方法,所以必須由對(duì)象調(diào)用才可以用于比較。而自動(dòng)變量既不是類的實(shí)例也不是類的引用所以不能用equals()方法。

  2.boolean tem = a.equals("b");

  equals()方法一般用于比較的是對(duì)象的內(nèi)容但是也有的情況下也會(huì)去比較兩個(gè)對(duì)象的地址。

  接下來

  寫一個(gè)測(cè)試程序

package com;

import java.util.Date;

public class test {
  public static void main(String[] args) {
    Integer integer1 = new Integer(1);
    Integer integer2 = new Integer(1);
    String str1 = new String("123");
    String str2 = new String("123");
    Date date1 = new Date();
    Date date2 = new Date();
    Double double1 = new Double("1.0");
    Double double2 = new Double("1.0");
    Boolean tem1 = new Boolean(true);
    Boolean tem2 = new Boolean(true);
    Object object1 = new Object();
    Object object2 = new Object();

    System.out.println("----Object------");
    System.out.println(object1.equals(object2));
    System.out.println(object1 == object2);
    System.out.println(object1.equals(object1));
    System.out.println(object1 == object1);
    System.out.println("----Boolean------");
    System.out.println(tem1.equals(tem2));
    System.out.println(tem1 == tem2);
    System.out.println("----Double------");
    System.out.println(double1.equals(double2));
    System.out.println(double1 == double2);
    System.out.println("----Integer------");
    System.out.println(integer1.equals(integer2));
    System.out.println(integer1 == integer2);
    System.out.println("----String------");
    System.out.println(str1.equals(str2));
    System.out.println(str1 == str2);
    System.out.println("----Date------");
    System.out.println(date1.equals(date2));
    System.out.println(date1 == date2);
  }
}
 

 結(jié)果:

----Object------
false
false
true
true
----Boolean------
true
false
----Double------
true
false
----Integer------
true
false
----String------
true
false
----Date------
true
false

  首先對(duì)Object的比較,當(dāng)比較的兩個(gè)對(duì)象一樣時(shí),==和equals()的結(jié)果都是true,當(dāng)兩個(gè)對(duì)象不一樣時(shí)返回的都是false。所以在==和equals用于比較對(duì)象時(shí),他們比較的都是對(duì)象的地址,其實(shí)本質(zhì)是一樣的。下面是Object類中equals()方法的代碼:

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

  而對(duì)于Boolean,Double(Float同理),Interger(Shot,Long同理),String,Date我也找了他們的源碼,下面我依次貼出來在Boolean,Double,Interger,String,Date這些類中equals()方法的源碼,這時(shí)候equals()方法就被重寫了,因?yàn)檫@些類都是繼承于Object類的嘛。

  Boolean:

public boolean equals(Object obj) {
    if (obj instanceof Boolean) {
      return value == ((Boolean)obj).booleanValue();
    }
    return false;
  }

  Double:

public boolean equals(Object obj) {
    return (obj instanceof Double)
        && (doubleToLongBits(((Double)obj).value) ==
           doubleToLongBits(value));
  }

  Interger:

public boolean equals(Object obj) {
    if (obj instanceof Integer) {
      return value == ((Integer)obj).intValue();
    }
    return false;
  }

  String:

public boolean equals(Object anObject) {
    if (this == anObject) {
      return true;
    }
    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;
  }

  Date:

public boolean equals(Object obj) {
    return obj instanceof Date && getTime() == ((Date) obj).getTime();
  }

  也就是說在這些時(shí)候重寫了Object類的equals()方法用于比較兩個(gè)對(duì)象實(shí)際的內(nèi)容而不再是地址了,當(dāng)然肯定不只是這些,這里只是舉出了幾個(gè)比較常見的java原生類重寫Object類的equals()方法的情況。

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • 在springboot中攔截器Filter中注入bean失敗問題及解決

    在springboot中攔截器Filter中注入bean失敗問題及解決

    這篇文章主要介紹了在springboot中攔截器Filter中注入bean失敗問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • 使用springBoot項(xiàng)目配置文件位置調(diào)整到打包外

    使用springBoot項(xiàng)目配置文件位置調(diào)整到打包外

    這篇文章主要介紹了使用springBoot項(xiàng)目配置文件位置調(diào)整到打包外,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-08-08
  • 詳解Java繼承中屬性、方法和對(duì)象的關(guān)系

    詳解Java繼承中屬性、方法和對(duì)象的關(guān)系

    這篇文章主要幫助大家詳細(xì)介紹了Java繼承中屬性、方法和對(duì)象的關(guān)系,感興趣的朋友可以參考一下
    2016-03-03
  • jar包的各種啟動(dòng)方式超詳細(xì)總結(jié)

    jar包的各種啟動(dòng)方式超詳細(xì)總結(jié)

    jar文件是一種軟件包文件格式,通常用于聚合大量的JAVA類文件,以jar為文件擴(kuò)展名,下面這篇文章主要給大家介紹了關(guān)于jar包的各種啟動(dòng)方式,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-04-04
  • 詳解Java中類與對(duì)象的關(guān)系

    詳解Java中類與對(duì)象的關(guān)系

    這篇文章主要介紹了詳解Java中類與對(duì)象的關(guān)系,類的關(guān)鍵字是class,在Java編程里,類的作用相當(dāng)于機(jī)械師手中的構(gòu)造圖,如果沒有構(gòu)造圖,就無法打造武器,同樣如果沒有類,就無法實(shí)例化,需要的朋友可以參考下
    2023-05-05
  • 關(guān)于IDEA的junit單元測(cè)試Scanner輸入不可用的問題(多種原因分析)

    關(guān)于IDEA的junit單元測(cè)試Scanner輸入不可用的問題(多種原因分析)

    IDEA在Junit測(cè)試中使用了Scanner,但是控制臺(tái)一直轉(zhuǎn)圈,無法輸入,eclipse默認(rèn)可用,其實(shí)解決方法很多,今天小編給大家分享多種問題原因分析及解決方法,感興趣的朋友一起看看吧
    2021-06-06
  • Java求10到100000之間的水仙花數(shù)算法示例

    Java求10到100000之間的水仙花數(shù)算法示例

    這篇文章主要介紹了Java求10到100000之間的水仙花數(shù)算法,結(jié)合實(shí)例形式分析了水仙花數(shù)的概念及相應(yīng)的java算法實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-10-10
  • mybatis簡(jiǎn)單resultMap使用詳解

    mybatis簡(jiǎn)單resultMap使用詳解

    resultMap是Mybatis最強(qiáng)大的元素,它可以將查詢到的復(fù)雜數(shù)據(jù)(比如查詢到幾個(gè)表中數(shù)據(jù))映射到一個(gè)結(jié)果集當(dāng)中。這篇文章主要介紹了mybatis簡(jiǎn)單resultMap使用詳解的相關(guān)資料,需要的朋友可以參考下
    2021-04-04
  • java 利用反射機(jī)制,獲取實(shí)體所有屬性和方法,并對(duì)屬性賦值

    java 利用反射機(jī)制,獲取實(shí)體所有屬性和方法,并對(duì)屬性賦值

    這篇文章主要介紹了 java 利用反射機(jī)制,獲取實(shí)體所有屬性和方法,并對(duì)屬性賦值的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • Java使用ProcessBuilder?API優(yōu)化流程

    Java使用ProcessBuilder?API優(yōu)化流程

    Java?的?Process?API?為開發(fā)者提供了執(zhí)行操作系統(tǒng)命令的強(qiáng)大功能,這篇文章將詳細(xì)介紹如何使用?ProcessBuilder?API?來方便的操作系統(tǒng)命令,需要的可以收藏一下
    2023-06-06

最新評(píng)論