程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> java中equals和等號(==)的差別淺談

java中equals和等號(==)的差別淺談

編輯:關於JAVA

java中equals和等號(==)的差別淺談。本站提示廣大學習愛好者:(java中equals和等號(==)的差別淺談)文章只能為提供參考,不一定能成為您想要的結果。以下是java中equals和等號(==)的差別淺談正文


java中的數據類型,可分為兩類:
1.根本數據類型,也稱原始數據類型。byte,short,char,int,long,float,double,boolean   他們之間的比擬,運用雙等號(==),比擬的是他們的值。
2.復合數據類型(類)   當他們用(==)停止比擬的時刻,比擬的是他們在內存中的寄存地址,所以,除非是統一個new出來的對象,他們的比擬後的成果為true,不然比擬後成果為false。JAVA傍邊一切的類都是繼續於Object這個基類的,在Object中的基類中界說了一個equals的辦法,這個辦法的初始行動是比擬對象的內存地 址,但在一些類庫傍邊這個辦法被籠罩失落了,如String,Integer,Date在這些類傍邊equals有其本身的完成,而不再是比擬類在堆內存中的寄存地址了。   關於復合數據類型之間停止equals比擬,在沒有覆寫equals辦法的情形下,他們之間的比擬照樣基於他們在內存中的寄存地位的地址值的,由於Object的equals辦法也是用雙等號(==)停止比擬的,所以比擬後的成果跟雙等號(==)的成果雷同。

 publicclass TestString {
 publicstaticvoid main(String[] args) {
 String s1 ="Monday";
 String s2 ="Monday";
 if (s1 == s2)
 {
 System.out.println("s1 == s2");}
 else{
 System.out.println("s1 != s2");}
 }
 }

編譯並運轉法式,輸入:s1 == s2解釋:s1 與 s2 援用統一個 String 對象 -- "Monday"! 2.再略微修改一下法式,會有更奇異的發明:


publicclass TestString {
publicstaticvoid main(String[] args)
{
String s1 ="Monday";
String s2 =new String("Monday");
if (s1 == s2) {System.out.println("s1 == s2");
}
else
{
System.out.println("s1 != s2");
}
if (s1.equals(s2))
{
System.out.println("s1 equals s2");
}
else
{
System.out.println("s1 not equals s2");
}
}
}

我們將s2用new操作符創立 法式輸入: s1 != s2 s1 equals s2 解釋:s1 s2分離援用了兩個"Monday"String對象
3. 字符串緩沖池 本來,法式在運轉的時刻會創立一個字符串緩沖池當應用 s2 = "Monday" 如許的表達是創立字符串的時刻,法式起首會在這個String緩沖池中尋覓雷同值的對象,在第一個法式中,s1先被放到了池中,所以在s2被創立的時刻,法式找到了具有雷同值的 s1 將s2援用s1所援用的對象"Monday" 第二段法式中,應用了 new 操作符,他明確的告知法式:"我要一個新的!不要舊的!"因而一個新的"Monday"Sting對象被創立在內存中。他們的值雷同,然則地位分歧,一個在池中泅水一個在岸邊歇息。哎呀,真是資本糟蹋,明明是一樣的非要離開做甚麼呢?
4.再次更改法式:

publicclass TestString
{
publicstaticvoid main(String[] args)
{
String s1 ="Monday";
String s2 =new String("Monday");
s2 = s2.intern();
if (s1 == s2)
{
System.out.println("s1 == s2");
}
else
{
System.out.println("s1 != s2");
}
if (s1.equals(s2))
{
System.out.println("s1 equals s2");
}
else
{
System.out.println("s1 not equals s2");
}
}
}

此次參加:s2 = s2.intern(); 法式輸入: s1 == s2 s1 equals s2 原 來,(java.lang.String的intern()辦法"abc".intern()辦法的前往值照樣字符串"abc",外面上看起來似乎這個方 法沒甚麼用途。但現實上,它做了個小舉措:檢討字符串池裡能否存在"abc"這麼一個字符串,假如存在,就前往池裡的字符串;假如不存在,該辦法會 把"abc"添加到字符串池中,然後再前往它的援用。 )

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved