日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

==与equals,String的equals()方法

發布時間:2025/3/20 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ==与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 true

String類型的比較介紹

string是一個非常特殊的數據類型,它可以通過String x = value;的方式進行賦值,也可以通過String x = new
String(value)方式進行賦值。

String x = value;方式賦予的參數,會放入常量池內存塊區域中;
String x = new String(value);方式賦予的參數,會放入堆內存區域中,當成對象處理。

public class test2 {public static void main(String[] args) {String a=new String("ab");//a為一個引用String b=new String("ab");//b為另一個引用,對象的內容一樣String x="ab";//放在常量池中String y="ab";//從常量池中查找System.out.println("a的地址"+System.identityHashCode(a));System.out.println("b的地址"+System.identityHashCode(b));System.out.println("x的地址"+System.identityHashCode(x));System.out.println("y的地址"+System.identityHashCode(y));//地址相同,返回trueSystem.out.println("x==y:"+(x==y));//地址不同,非同一個對象,返回falseSystem.out.println("a==b:"+(a==b));//地址不同,值相同,返回trueSystem.out.println(a.equals(b));} }

運行結果:

a的地址366712642 b的地址1829164700 x的地址2018699554 y的地址2018699554 x==y:true a==b:false true

為什么string的equals()方法比較返回true,因為string重寫了equals()方法
如果需要比較某個對象是否相同,一定要重寫equals(),比較其中的內容是否相同,如果相同,返回true;否則,返回false!

public class Demo2 {public static void main(String[] args) {String name1="張三"; // 直接賦值方式String name2=new String("張三"); // new方式String name3=name2; // 傳遞引用// ==比較的是引用System.out.println("name1==name2:"+(name1==name2));System.out.println("name1==name3:"+(name1==name3));System.out.println("name2==name3:"+(name2==name3));// equals比較的是具體內容System.out.println("name1.equals(name2):"+(name1.equals(name2)));System.out.println("name1.equals(name3:"+(name1.equals(name3)));System.out.println("name2.equals(name3):"+(name2.equals(name3)));} }

運行輸出:

name1==name2:false name1==name3:false name2==name3:true name1.equals(name2):true name1.equals(name3:true name2.equals(name3):true

內存示意圖:

總結

以上是生活随笔為你收集整理的==与equals,String的equals()方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。