麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發(fā) > Java > 正文

Java中equals與==的用法和區(qū)別

2024-07-14 08:42:50
字體:
供稿:網(wǎng)友

背景介紹

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

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

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

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

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

基本數(shù)據(jù)類型之間的比較需要用雙等號(==),因為他們比較的是值

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

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

Java中的字符串String屬于引用數(shù)據(jù)類型。因為String是一個類

當(dāng)他們用(==)進(jìn)行比較的時候,比較的是他們在內(nèi)存中的存放地址,所以,除非是同一個new出來的對象,他們的比較后的結(jié)果為true,否則比較后結(jié)果為false。因為沒new一次就會重新開辟一個新的堆內(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這個基類的,在Object類中定義了一個equals方法,這個方法的初始行為是比較對象的內(nèi)存地址,但在一些類庫中已經(jīng)重寫了這個方法(一般都是用來比較對象的成員變量值是否相同),比如: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é):

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

 == 的作用:

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

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

equals 的作用:

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

String類的equals()方法

在之前文章介紹JVM的時候,提到過一個常量池,這里咱們再來介紹下

String a = "abc";// abc在常量池中String b = "abc";//棧中b指向常量池中的abcString c = new String("abc");// 在堆內(nèi)存中重新開辟了一個abc的空間String d = c.intern();//檢查字符串池里是否存在"abc"這么一個字符串,如果存在,就返回池里的字符串;如果不存在,該方法會 把"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

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對VeVb武林網(wǎng)的支持。


注:相關(guān)教程知識閱讀請移步到JAVA教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: aa国产视频一区二区 | 成人在线网站 | 欧美成人免费电影 | 成人在线免费视频播放 | 国产欧美在线一区二区三区 | 国产精品免费久久久久久 | 免费a级毛片大学生免费观看 | av国产在线被下药迷网站 | 1级片在线观看 | 国产精品久久久久久久久久久久久久久久 | 日本爽快片100色毛片视频 | 久久精品视频网址 | 男女羞羞视频在线免费观看 | 成人免费看片a | a免费视频 | 午夜精品小视频 | 新久草在线视频 | 日日操夜夜透 | 久久国产精品无码网站 | 中国a级黄色片 | 一区二区三区四区高清视频 | 久久精品久久久久 | 久久成人国产精品 | 国产精品久久久久久久久久久久午夜 | 成人av一二三区 | 91久久夜色精品国产网站 | 深夜免费观看视频 | free国产hd老熟bbw | 精品无吗乱吗av国产爱色 | 亚洲精品欧美二区三区中文字幕 | 免费毛片免费看 | 亚洲欧美一区二区三区在线观看 | 粉嫩粉嫩一区二区三区在线播放 | xxxxxx免费| 黄色大片免费网站 | 日韩一级视频 | 51国产偷自视频区视频小蝌蚪 | 91av爱爱| av在线一区二区三区四区 | 久草在线手机观看 | 亚洲第一成人久久网站 |