Java中equals與==的區(qū)別是什么

今天就跟大家聊聊有關(guān)Java中equals與==的區(qū)別是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

我們提供的服務(wù)有:成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、敘州ssl等。為1000多家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的敘州網(wǎng)站制作公司

背景介紹

== 比較的是變量(棧)內(nèi)存中存放的對(duì)象的(堆)內(nèi)存地址,用來判斷兩個(gè)對(duì)象的地址是否相同,即是否是指相同一個(gè)對(duì)象。比較的是真正意義上的指針操作。

equals用來比較的是兩個(gè)對(duì)象的內(nèi)容是否相等,由于所有的類都是繼承自java.lang.Object類的,所以適用于所有對(duì)象,如果沒有對(duì)該方法進(jìn)行覆蓋的話,調(diào)用的仍然是Object類中的方法,而Object中的equals方法返回的卻是==的判斷。

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

基本數(shù)據(jù)類型

byte,short,char,int,long,float,double,boolean

基本數(shù)據(jù)類型之間的比較需要用雙等號(hào)(==),因?yàn)樗麄儽容^的是值

引用數(shù)據(jù)類型

接口、類、數(shù)組等非基本數(shù)據(jù)類型

Java中的字符串String屬于引用數(shù)據(jù)類型。因?yàn)镾tring是一個(gè)類

當(dāng)他們用(==)進(jìn)行比較的時(shí)候,比較的是他們?cè)趦?nèi)存中的存放地址,所以,除非是同一個(gè)new出來的對(duì)象,他們的比較后的結(jié)果為true,否則比較后結(jié)果為false。因?yàn)闆]new一次就會(huì)重新開辟一個(gè)新的堆內(nèi)存空間

Entity entity = new Entity();
Entity entity1 = new Entity();
Entity entity2 = entity;
 
System.out.println(entity==entity2);
System.out.println(entity.equals(entity2));

System.out.println(entity.equals(entity1));
System.out.println(entity==entity1);

執(zhí)行結(jié)果

true
true
false
false

equals()方法介紹

Java中所有的類都是繼承與Object這個(gè)基類的,在Object類中定義了一個(gè)equals方法,這個(gè)方法的初始行為是比較對(duì)象的內(nèi)存地址,但在一些類庫中已經(jīng)重寫了這個(gè)方法(一般都是用來比較對(duì)象的成員變量值是否相同),比如:String,Integer,Date 等類中,所以他們不再是比較類在堆中的地址了、

Object類中源碼

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

String類中重寫后的代碼

public boolean equals(Object var1) {
  if (this == var1) {
   return true;
  } else {
   if (var1 instanceof String) {
    String var2 = (String)var1;
    int var3 = this.value.length;
    if (var3 == var2.value.length) {
     char[] var4 = this.value;
     char[] var5 = var2.value;

     for(int var6 = 0; var3-- != 0; ++var6) {
      if (var4[var6] != var5[var6]) {
       return false;
      }
     }

     return true;
    }
   }

   return false;
  }
 }

總結(jié):

對(duì)于復(fù)合數(shù)據(jù)類型之間進(jìn)行equals比較,在沒有覆寫equals方法的情況下,他們之間的比較還是內(nèi)存中的存放位置的地址值,跟雙等號(hào)(==)的結(jié)果相同;如果被復(fù)寫,按照復(fù)寫的要求來。

 == 的作用:

基本類型:比較的就是值是否相同

引用類型:比較的就是地址值是否相同

equals 的作用:

引用類型:默認(rèn)情況下,比較的是地址值,重寫該方法后比較對(duì)象的成員變量值是否相同

String類的equals()方法

在之前文章介紹JVM的時(shí)候,提到過一個(gè)常量池,這里咱們?cè)賮斫榻B下

String a = "abc";// abc在常量池中
String b = "abc";//棧中b指向常量池中的abc
String c = new String("abc");// 在堆內(nèi)存中重新開辟了一個(gè)abc的空間
String d = c.intern();//檢查字符串池里是否存在"abc"這么一個(gè)字符串,如果存在,就返回池里的字符串;如果不存在,該方法會(huì) 把"abc"添加到字符串池中,然后再返回它的引用。
  

System.out.println(a==b);
System.out.println(a.equals(b));
System.out.println(a==c);
System.out.println(a.equals(c));
System.out.println(a==d);
System.out.println(a.equals(d));

true
true
false
true
true
true

看完上述內(nèi)容,你們對(duì)Java中equals與==的區(qū)別是什么有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。

分享題目:Java中equals與==的區(qū)別是什么
網(wǎng)站地址:http://muchs.cn/article26/geopjg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)網(wǎng)站維護(hù)、品牌網(wǎng)站設(shè)計(jì)動(dòng)態(tài)網(wǎng)站、云服務(wù)器、手機(jī)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)