亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

 大概說(shuō)equals和==都比較的是什么:

  1. boolean tem = a == b;

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

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

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

  接下來(lái)

  寫(xiě)一個(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我也找了他們的源碼,下面我依次貼出來(lái)在Boolean,Double,Interger,String,Date這些類中equals()方法的源碼,這時(shí)候equals()方法就被重寫(xiě)了,因?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();
  }

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

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

相關(guān)文章

  • spring webflux自定義netty 參數(shù)解析

    spring webflux自定義netty 參數(shù)解析

    這篇文章主要介紹了spring webflux自定義netty 參數(shù)解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java實(shí)現(xiàn)訂單未支付則自動(dòng)取消的五種方案及對(duì)比分析

    Java實(shí)現(xiàn)訂單未支付則自動(dòng)取消的五種方案及對(duì)比分析

    作為電商系統(tǒng)中的核心功能,"訂單超時(shí)未支付自動(dòng)取消" 是一個(gè)典型的定時(shí)任務(wù)場(chǎng)景,這個(gè)看似簡(jiǎn)單的需求背后,隱藏著高并發(fā)、數(shù)據(jù)一致性、性能損耗等多個(gè)技術(shù)痛點(diǎn),本文將從業(yè)務(wù)場(chǎng)景出發(fā),分析該需求的難點(diǎn),然后依次介紹五種 Java 技術(shù)實(shí)現(xiàn)方案,需要的朋友可以參考下
    2025-05-05
  • Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(24)

    Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(24)

    下面小編就為大家?guī)?lái)一篇Java基礎(chǔ)的幾道練習(xí)題(分享)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧,希望可以幫到你
    2021-07-07
  • springboot使用alibaba的druid數(shù)據(jù)庫(kù)連接池錯(cuò)誤的問(wèn)題及解決

    springboot使用alibaba的druid數(shù)據(jù)庫(kù)連接池錯(cuò)誤的問(wèn)題及解決

    這篇文章主要介紹了springboot使用alibaba的druid數(shù)據(jù)庫(kù)連接池錯(cuò)誤的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • java數(shù)據(jù)結(jié)構(gòu)之二分查找法 binarySearch的實(shí)例

    java數(shù)據(jù)結(jié)構(gòu)之二分查找法 binarySearch的實(shí)例

    這篇文章主要介紹了java數(shù)據(jù)結(jié)構(gòu)之二分查找法 binarySearch的實(shí)例的相關(guān)資料,希望通過(guò)本文能幫助到大家,讓大家理解掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-10-10
  • Java基本概念監(jiān)視器實(shí)習(xí)原理解析

    Java基本概念監(jiān)視器實(shí)習(xí)原理解析

    這篇文章主要介紹了Java基本概念監(jiān)視器實(shí)習(xí)原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Java 反射機(jī)制原理與用法詳解

    Java 反射機(jī)制原理與用法詳解

    這篇文章主要介紹了Java 反射機(jī)制原理與用法,結(jié)合實(shí)例形式詳細(xì)分析了java反射機(jī)制的相關(guān)概念、原理、使用方法及操作注意事項(xiàng),需要的朋友可以參考下
    2019-12-12
  • Mybatis 將table表名作為參數(shù)傳入操作

    Mybatis 將table表名作為參數(shù)傳入操作

    這篇文章主要介紹了Mybatis 將table表名作為參數(shù)傳入操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • 解決spring boot環(huán)境切換失效的問(wèn)題

    解決spring boot環(huán)境切換失效的問(wèn)題

    這篇文章主要介紹了解決spring boot環(huán)境切換失效的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • SpringBoot如何集成Kafka低版本和高版本

    SpringBoot如何集成Kafka低版本和高版本

    這篇文章主要介紹了SpringBoot如何集成Kafka低版本和高版本問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03

最新評(píng)論