&和&&,==和equals的區別
阿新 • • 發佈:2018-11-25
&和&&
相同點:都可以表示邏輯與(and),當運算子兩邊的結果都為true時,結果才為true,只要有一邊為false,結果就為false。
不同點:&&還有短路的作用,即如果第一個表示式的結果為false,就不再計算第二個表示式。而&會把第二個表示式也計算了。
==和equals
(1)對於字串變數來說,使用“==”和“equals()”方法比較字串時,其比較方法不同。
“==”比較兩個變數本身的值,即兩個物件在記憶體中的首地址。
“equals()”比較字串中所包含的內容是否相同。
(2)對於非字串變數來說,"=="和"equals"方法的作用是相同的都是用來比較其物件在堆記憶體的首地址,即用來比較兩個引用變數是否指向同一個物件。
關於equals與==的區別從以下幾個方面來說:
(1) 如果是基本型別比較,那麼只能用==來比較,不能用equals
(2)對於基本型別的包裝型別,比如Boolean、Character、Byte、Shot、Integer、Long、Float、Double等的引用變數,==是比較地址的,而equals是比較內容的。
這是Integer的例項,如果是其他的比如Double、Character、Float等也一樣
(3) 對於String(字串)作進一步的說明。
package com.learn;
/**
* @ author:森林之下
* @ Date: Created in 14:26 2018/11/19
* @ Description: 測試==和equals
*/
public class Test1 {
public static void main(String[] args) {
String s1 = "123";
String s2 = "123";
String s3 = "abc";
String s4 = new String("123");
String s5 = new String("123");
String s6 = new String("abc");
System.out.println(s1 == s2);//true,s1與s2分別指向由字串常量”123” 建立的物件,在常量池中,只有一個物件,
// 內容為123,有兩個引用s1和s2指向這個物件,故這兩個引用變數所指向的地址是相同的
System.out.println(s1.equals(s2));//true,兩個物件的內容都是字串常量”123”
System.out.println(s1 == s3);//false,s1和s3指向物件不同,地址當然不同
System.out.println(s1.equals(s3));//false,內容當然不同
System.out.println(s4 == s5);//false,s4和s5是用new操作符創建出來的,是在記憶體中分配兩塊空間給這兩個物件的,
// 因而這兩個物件的記憶體地址不一樣
System.out.println(s4.equals(s5));//true,內容相同
System.out.println(s4 == s6);//false,是兩塊不同的空間,不同的物件,記憶體地址不同
System.out.println(s4.equals(s6));//false,內容不同
System.out.println(s1 == s4);//false,分別指向兩個不同的物件
System.out.println(s1.equals(s4));//true,內容相同
}
}
(4)最後一種情況
class Value {
int i;
}
public class EqualsMethod2 {
public static void main(String[] args) {
Value v1 = new Value();
Value v2 = new Value();
v1.i = v2.i = 100;
System.out.println(v1.equals(v2));//(1)flase
System.out.println(v1 == v2);//(2)false
}
}
/*如果在新類中被覆蓋了equals方法,就可以用來比較內容的。但是在上面的例子中類Value並沒有覆蓋Object中的equals方法,而是繼承了該方法,因此它就是被用來比較地址的,又v1和v2的所指向的物件不相同,故標記(1)處的v1.equals(v2)執行結果為false,標記為(2)處的v1 == v2執行結果也為false。 */
注:==和equals部分引用https://www.cnblogs.com/bluestorm/archive/2012/03/02/2377615.html