亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術(shù)文章
文章詳情頁

Java中equals()知識(shí)點(diǎn)總結(jié)

瀏覽:42日期:2022-09-03 16:48:12

經(jīng)過幾天的學(xué)習(xí),終于對equals的用法有了比較全面的認(rèn)識(shí),并做一個(gè)總結(jié)。

1.equals的本意——即在Object對象中定義的equals()方法有什么樣的意義。

(此處先附上==的作用,后面仍有敘述。因?yàn)?=和equals()方法的關(guān)系是很密切的,后面有我自己的看法。

==用于比較引用和比較基本數(shù)據(jù)類型時(shí)具有不同的功能:比較基本數(shù)據(jù)類型,如果兩個(gè)值相同,則結(jié)果為true而在比較引用時(shí),如果引用指向內(nèi)存中的同一對象,結(jié)果為true)

public boolean equals(Object obj)

其比較規(guī)則為:當(dāng)參數(shù)obj引用的對象與當(dāng)前對象為同一個(gè)對象時(shí),就返回true,否則返回false.

public class Fish { private int weight; private String color; public Fish(int weight, String color) { this.color = color; this.weight = weight; } public int getWeight() { return weight; } public void setWeight(int weight) { this.weight = weight; } public String getColor() { return color; } public void setColor(String color) { this.color = color; }}public class EqualsTest { public static void main(String[] args) { Fish f1 = new Fish(1, 'blue'); Fish f2 = new Fish(1, 'blue'); System.out.println(f1 == f2); System.out.println(f1.equals(f2)); }}

運(yùn)行結(jié)果為

falsefalse

由此可見,equals()方法的本意為確定兩個(gè)對象的引用是否相同。

2.而JDK類中有一些類覆蓋了oject類的equals()方法,比較規(guī)則為:如果兩個(gè)對象的類型一致,并且內(nèi)容一致,則返回true,這些類有:

java.io.file,java.util.Date,java.lang.string,包裝類(Integer,Double等)

public class EqualsTest { public static void main(String[] args) { String s1=new String('sss'); String s2=new String('sss'); System.out.println(s1==s2); System.out.println(s1.equals(s2)); }}

運(yùn)行結(jié)果為

falsefalse

由此可見,equals()方法的本意為確定兩個(gè)對象的引用是否相同。

2.而JDK類中有一些類覆蓋了oject類的equals()方法,比較規(guī)則為:如果兩個(gè)對象的類型一致,并且內(nèi)容一致,則返回true,這些類有:

java.io.file,java.util.Date,java.lang.string,包裝類(Integer,Double等)

public class EqualsTest { public static void main(String[] args) { String s1=new String('sss'); String s2=new String('sss');System.out.println(s1==s2); System.out.println(s1.equals(s2)); }}

運(yùn)行結(jié)果為

falsetrue

由此知道,在String中equals()方法被進(jìn)行了覆蓋,使其意義變?yōu)楸容^兩個(gè)對象的內(nèi)容是否一致

3.如果我們要自己覆蓋equals()方法,讓其比較內(nèi)容或者有別的使用方法(當(dāng)然我們一般都是用于比較內(nèi)容的,但是覆蓋的方法中真正的實(shí)現(xiàn)究竟是什么樣的,誰知道呢O(∩_∩)O~)

public class Fish { private int weight; private String color; public Fish(int weight, String color) { this.color = color; this.weight = weight; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((color == null) ? 0 : color.hashCode()); result = prime * result + weight; return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Fish other = (Fish) obj; if (color == null) { if (other.color != null)return false; } else if (!color.equals(other.color)) return false; if (weight != other.weight) return false; return true; } public int getWeight() { return weight; } public void setWeight(int weight) { this.weight = weight; } public String getColor() { return color; } public void setColor(String color) { this.color = color; }}public class EqualsTest { public static void main(String[] args) { Fish f1 = new Fish(1, 'blue'); Fish f2 = new Fish(1, 'blue'); System.out.println(f1 == f2); System.out.println(f1.equals(f2)); }}

運(yùn)行結(jié)果為

falsetrue

此例子中我復(fù)寫了equals()方法和hashcode()方法,使得equals()方法脫離的本意,不再是比較兩個(gè)對象的引用是否相同,而是比較其內(nèi)容是否相同。

以上內(nèi)容為一般書上的總結(jié),下面是我自己想到的一些東西。

我們可以知道計(jì)算機(jī)歸根到底進(jìn)行的只是一些二進(jìn)制數(shù)的與或非運(yùn)算,加法乘法運(yùn)算。由此有了些基本的運(yùn)算符,所有的函數(shù)本質(zhì)上其實(shí)現(xiàn)都是使用基本運(yùn)算符來實(shí)現(xiàn)的。而==是基本運(yùn)算符中的一個(gè),它的作用:用于比較引用和比較基本數(shù)據(jù)類型時(shí)具有不同的功能:比較基本數(shù)據(jù)類型,如果兩個(gè)值相同,則結(jié)果為true而在比較引用時(shí),如果引用指向內(nèi)存中的同一對象,結(jié)果為true

而equals()作為方法,我們可以推測知道,它其中的實(shí)現(xiàn)所使用的肯定是==運(yùn)算符。再進(jìn)一步的思考,equals()本意不正是==運(yùn)算符進(jìn)行對象比較時(shí)候的作用嗎。那么,既然是兩者有同樣的作用,為什么還要弄出一個(gè)equals()方法來呢。因?yàn)?=運(yùn)算符不允許我們進(jìn)行覆蓋,也就是說它限制了我們的表達(dá)。在上面的第三個(gè)例子中,我們復(fù)寫equals()方法,達(dá)到比較對象內(nèi)容是否相同的目的。而這些通過==運(yùn)算符是做不到的。

到此這篇關(guān)于Java中equals()知識(shí)點(diǎn)總結(jié)的文章就介紹到這了,更多相關(guān)Java中的equals()內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 国产免费小视频 | 国产一区二区久久 | 91啦在线视频 | zzijzzij亚洲日本护士 | 亚洲国产欧美日韩第一香蕉 | 亚洲xx视频 | 亚洲视频一区网站 | 91看视频 | 亚洲 欧美 日韩在线综合福利 | 国产一级毛片免 | 国产v欧美v日本v精品 | 亚洲国产欧美国产第一区二区三区 | 亚洲精品国产精品一区二区 | caoporen个人免费公开视频 | aaa黄色片 | 国产精品成人69xxx免费视频 | 久热香蕉精品视频在线播放 | 亚洲图片偷拍自拍 | 国产福利写真视频在线观看 | 午夜精品久久久久久99热 | 日韩在线视频免费 | 久久九九色 | 色男人天堂| 动漫chinesehdxxxx 动漫男女交性动漫网站 | 无码精品日韩中文字幕 | 亚洲激情成人网 | 日韩中文字幕久久久经典网 | 中国japanesevideo乱 | yy4080一级毛片免费观看 | 国产精品久久久久毛片 | 国产高清在线精品二区一 | 国产在线视频91 | 窝窝免费午夜视频一区二区 | 久色国产| 国产一级片视频 | 国产va欧美va在线观看 | 西西444www| 美女一级毛片免费观看 | 日韩电影中文 | 午夜视频网 | 亚洲国产系列久久精品99人人 |