一. ==和equals的區別
1. ==是運算符
2. equals是String對象的方法
一般有兩種類型的比較
1. 基本數據類型的比較
2. 引用對象的比較
1. 基本數據類型的比較
==和equals都比較的是值是否相等,相等則為true,否則為false
2. 引用對象的比較
==和equals都是比較是棧內存中的地址是否相等,相等則為true,否則為false
注意:
1. String是一個特殊的引用數據類型,==比較的是字符串對象的引用地址是否一樣,equals比較的是棧中的內容是否一致。
String ss = new String("abc");
String sss = new String("abc");
if(ss == sss){
System.out.println("ss == sss is true");
}
if(ss.equals(sss)){
System.out.println("ss equals sss is true");
}
控制台輸出:
ss != sss
ss equals sss
表明:ss和sss在棧中的內存地址不同,但是在堆中的內容是相同的。
String ss = new String("abc");
String ssss = ss;
//判斷ss和ssss在棧中的引用地址是否一樣
if(ss == ssss){
System.out.println("ss == ssss");
}else{
System.out.println("ss != ssss");
}
//判斷ss和ssss在堆中的內容是否一樣
if(ss.equals(ssss)){
System.out.println("ss equals ssss");
}else{
System.out.println("ss not equals ssss");
}
控制台輸出:
ss == ssss
ss equals ssss
這表明ss和ssss是相同的對象,並且他們在堆中的內容一樣
2. 引用對象的比較
TestBean obj1 = new TestBean();
TestBean obj2 = new TestBean();
TestBean obj3 = obj1;
if(obj1 == obj2){
System.out.println("obj1 == obj2");
}else{
System.out.println("obj1 != obj2");
}
if(obj1 == obj3){
System.out.println("obj1 == obj3");
}else{
System.out.println("obj1 != obj3");
}
控制台輸出:
obj1!= obj2
obj1== obj3
表明obj1和obj2不是同一個對象,在棧中的引用地址不同
obj1和obj3是相同的對象,在棧中的引用地址相同
二. =和equals ==的區別
=表示的是賦值,即將=右邊的值賦給左邊的變量。equals和==是表示操作