一、數據類型和‘==’
1. 基本數據類型(也稱原始數據類型): byte,short,char,int,long,float,double,boolean等等
基本數據類型,用“==”比較的時候,比較的就是他們的值
比如 int a = 10; int b = 10; a == b? 10等於10,那么返回的是True
2.引用數據類型: String,類,接口,數組,注解等等
引用數據,用“==”比較的時候,比較的是他們的在內存存放的地址值
二、equals
1. equals是在Object類(為所有類的父類)中定義了的一種非靜態的方法,需要用 對象名.equals(參數) 進行使用,所以equals只能比較引用數據類型,因為引用數據類型才能像類一樣實例化出對象來使用方法,而基本數據類型不能進行實例化對象
2. equals方法在Object類中的源碼為: public boolean equals(Object obj) { //this - s1 //obj - s2 return (this == obj);}
由此可知equals默認情況下也是比較對象的內存地址值,所以實際情況下意義不大,一般我們的會對equals進行重寫,使它一般用來比較對象的屬性值是否相同
3. 對於引用數據類型之間進行equals比較,在沒有覆寫equals方法的情況下,他們之間的比較還是內存中的存放位置的地址值,跟雙等號(==)的結果相同;如果被重寫,按照重寫的要求來。
三、“==”和equals的區別
1. 最本質的區別:== 是像 +、-、* 這類的運算符,可直接使用,而equals是一種非靜態的方法,需要對象調用
2. == 既可以比較基本數據類型,也可以比較引用數據類型,比較基本數據類型比較的是值,比較引用數據類型比較的是地址值
3. equals只能比較引用數據類型,且Object類的equals默認情況下是比較的是地址值,無意義,子類一般會重寫,改為比較:屬性值
如該文章能對你有所幫助,請幫忙點個推薦和關注!謝謝!0.0