==与equals,String的equals()方法
==介紹
它的作用是判斷兩個對象的地址是不是相等。即,判斷兩個對象是不是同一個對象(基本數據類型比較的是值,引用數據類型比較的是內存地址)。
基本數據類型:byte,short,char,int,long,float,double,boolean。他們之間的比較,應用雙等號(==),比較的是他們的值。
引用數據類型:當他們用(==)進行比較的時候,比較的是他們在內存中的存放地址(確切的說,是堆內存地址)。
public class test {public static void main(String[] args) {int i=100;//基本數據類型int j=100;//基本數據類型Integer x=100;//引用數據類型Integer y=100;//引用數據類型Integer s=1000;Integer d=1000;Integer a=new Integer(100);//引用數據類型Integer b=new Integer(100);//引用數據類型System.out.println("i的地址"+System.identityHashCode(i));System.out.println("j的地址"+System.identityHashCode(j));System.out.println("x的地址"+System.identityHashCode(x));System.out.println("y的地址"+System.identityHashCode(y));System.out.println("a的地址"+System.identityHashCode(a));System.out.println("b的地址"+System.identityHashCode(b));//基本類型相互比較其中的值,得trueSystem.out.println("i==j:"+(i==j));//int的引用類型Integer與基本類型進行比較的時候,包裝類會先進行自動拆箱,然后與基本類型進行值比較System.out.println("i==x:"+(i==x));//同上,包裝類先拆箱為基本類型,然后值比較System.out.println("i==a:"+(i==a));//都是引用類型,比較的是地址//在-128~127的Integer值并且以Integer x = value;的方式賦值的參數,x會從包裝類型自動拆箱成基本數據類型,以供重用System.out.println("x==y:"+(x==y));//都是引用類型,比較的是地址System.out.println("a==b:"+(a==b));//當s,d超出-128~127區間的時候,地址就變了,所以比較的結果就是false。System.out.println("s==d:"+(s==d));} }運行結果:
i的地址366712642 j的地址366712642 x的地址366712642 y的地址366712642 a的地址1829164700 b的地址2018699554 i==j:true i==x:true i==a:true x==y:true a==b:false s==d:false再看其它的包裝器自動拆箱情況:
equals()方法介紹
它的作用也是判斷兩個對象是否相等。但它一般有兩種使用情況:
情況1:類沒有覆蓋 equals() 方法。則通過 equals() 比較該類的兩個對象時,等價于通過“==”比較這兩個對象。
情況2:類覆蓋了 equals() 方法。一般,我們都覆蓋 equals() 方法來比較兩個對象的內容是否相等;若它們的內容相等,則返回 true (即,認為這兩個對象相等)。
Boolean、Byte、Short、Integer、Long、Float、Doulbe、Character 8種基本類型的包裝類都重寫了 equals() 方法,所以比較的時候,如果內容相同,則返回 true,例如:
Integer a=new Integer(100);//引用數據類型 Integer b=new Integer(100);//引用數據類型 System.out.println("a==b:"+(a==b)); System.out.println(a.equals(b));運行結果:
a==b:false trueString類型的比較介紹
string是一個非常特殊的數據類型,它可以通過String x = value;的方式進行賦值,也可以通過String x = new
String(value)方式進行賦值。
String x = value;方式賦予的參數,會放入常量池內存塊區域中;
String x = new String(value);方式賦予的參數,會放入堆內存區域中,當成對象處理。
運行結果:
a的地址366712642 b的地址1829164700 x的地址2018699554 y的地址2018699554 x==y:true a==b:false true為什么string的equals()方法比較返回true,因為string重寫了equals()方法
如果需要比較某個對象是否相同,一定要重寫equals(),比較其中的內容是否相同,如果相同,返回true;否則,返回false!
運行輸出:
name1==name2:false name1==name3:false name2==name3:true name1.equals(name2):true name1.equals(name3:true name2.equals(name3):true內存示意圖:
總結
以上是生活随笔為你收集整理的==与equals,String的equals()方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1.9 通过反射获取注解信息
- 下一篇: 1.2 实例:封装图书信息类