国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設(shè)計 > 正文

關(guān)于java中equals與==的區(qū)別的小實驗

2019-11-14 14:51:08
字體:
供稿:網(wǎng)友

java中equals與==經(jīng)常容易混淆,簡單一點說就是equals比較的是值是否相等,是一種方法,==比較的是二者是都為同一對象,是一種操作符。

做了幾個小實驗比較結(jié)果。

實驗一:

String str1="ab";String str2="ab";System.out.PRintln(s1==s2);//true
System.out.println(str1.equals(str2));//true

這里的str1與str2都指向了常量池中的同一對象,所以System.out.println(s1==s2);返回為true,當然,str1與str2二者字符串的值也是相同的。

 

實驗二:

1 String str1="ab";2 String str2="abc";3 System.out.println(str1==str2);//false4 System.out.println(str1.equals(str2));//false

這里的str1指向了字符串a(chǎn)b,初始時在常量池中并沒有找到字符串a(chǎn)bc,則開辟地址存儲字符串a(chǎn)bc,并將str2指向了abc字符串,所以str1與str2與并不是一個對象,他們的字符串值也不相同。

 

實驗三:

1 String str1="ab";2 String str2="ab";3 String str6=str2;4 System.out.println(str1==str6);//true5 System.out.println(str2==str6);//true6 System.out.println(str1.equals(str6));//true7 System.out.println(str2.equals(str6));//true

這里將str2的值賦值給str6,因為常量池中已經(jīng)存在了ab這個字符串,所以str1、str2與str6共享了同樣的對象,==與equals同樣返回true

 

實驗四:

1 String str1= new String("abc");2 String str2= "abc";3 System.out.println(str1==str2);//false

創(chuàng)建了兩個引用。創(chuàng)建了兩個對象。兩個引用分別指向不同的兩個對象。
以上代碼說明,只要是用new()來新建對象的,都會在堆中創(chuàng)建,而且其字符串是單獨存值的,即使與棧中的數(shù)據(jù)相同,也不會與棧中的數(shù)據(jù)共享。

 

實驗五:

1 String str1="ab";2 String str3=new String("ab");3 String str4=new String("ab");4 System.out.println(str3==str4);//false5 System.out.println(str1.equals(str3));//true6 System.out.println(str3.equals(str4));//true

因為str3與str4的字符串的值是相同的,所以str3.equals(str4)為true,但是由于str3與str4指向的不是同一個對象,所以str3==str4返回是false。同樣因為str1與str3字符串的值是相同的,盡管str1與str3指向的不是同一個對象,str1.equals(str3)同樣返回的是true

 

實驗六:

 

 1 String str1="ab"; 2 String str3=new String("ab"); 3 String str4=new String("ab");
String str5=str3;
4 System.out.println(str1.equals(str3));//true 5 System.out.println(str3.equals(str4));//true 6 System.out.println(str3.equals(str5));//true 7 System.out.println(str4.equals(str5));//true 8 System.out.println(str3==str5);//true 9 System.out.println(str4==str5);//false10 System.out.println(str1==str5);//false11 System.out.println(str1.equals(str5));//true

 

這里將str3賦值給str5,所以str3與str5指向了同一對象,這樣str3==str5返回為true值,str3.equals(str5)同樣返回true值。由于str4與str5指向的不是同一對象,所以str4==str5返回false。但是也是因為字符串的值是相同的,所以str4.euqals(str5)返回為true值。

 

下面是以上實驗所有的代碼:

 1 public class Test  2 { 3     public static void main(String[] args)  4     { 5         String str1="ab"; 6         String str2="abc"; 7         String str6=str2; 8         String str3=new String("ab"); 9         String str4=new String("ab");10                 String str5=str3;11         System.out.println(str1==str6);//true12         System.out.println(str2==str6);//true13         System.out.println(str1.equals(str6));//true14         System.out.println(str2.equals(str6));//true15         System.out.println(str1==str2);//true16         System.out.println(str1.equals(str2));//true17         System.out.println(str3==str4);//false18         System.out.println(str1.equals(str3));//true19         System.out.println(str3.equals(str4));//true20         System.out.println(str3.equals(str5));//true21         System.out.println(str4.equals(str5));//true22         System.out.println(str3==str5);//true23         System.out.println(str4==str5);//false24         System.out.println(str1==str5);//false25             System.out.println(str1.equals(str5));//true26     }27 }

 將String類換成Integer包裝類,測試代碼及結(jié)果如下:

 1 class TestNumber 2 { 3     public static void main(String[] args)  4     { 5         Integer str1=23; 6         Integer str2=23; 7         Integer str6=str2; 8         Integer str3=new Integer(23); 9         Integer str4=new Integer(23);10         Integer str5=str3;11         System.out.println(str1==str6);//true12         System.out.println(str2==str6);//true13         System.out.println(str1.equals(str6));//true14         System.out.println(str2.equals(str6));//true15         System.out.println(str1==str2);//true16         System.out.println(str1.equals(str2));//true17         System.out.println(str3==str4);//false18         System.out.println(str1.equals(str3));//true19         System.out.println(str3.equals(str4));//true20         System.out.println(str3.equals(str5));//true21         System.out.println(str4.equals(str5));//true22         System.out.println(str3==str5);//true23         System.out.println(str4==str5);//false24     }25 }

 


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 江孜县| 新昌县| 工布江达县| 苍溪县| 阿巴嘎旗| 年辖:市辖区| 咸阳市| 永新县| 巴南区| 馆陶县| 和林格尔县| 阿拉善左旗| 平顶山市| 弋阳县| 嵊州市| 彭州市| 宁蒗| 新河县| 楚雄市| 洪洞县| 福建省| 美姑县| 北安市| 镇安县| 南华县| 金沙县| 民乐县| 泰兴市| 吴川市| 南江县| 微山县| 浦东新区| 嘉善县| 田阳县| 建宁县| 华坪县| 于田县| 西和县| 大港区| 汉寿县| 贵阳市|