Java經典面試題: == 和 equals( )的區別
1. == 的用法
== 是一個運算子
作用域: 可以使用在基本資料型別變數和引用型別變數中
1.如果比較的是基本資料型別變數,比較兩個變數儲存的資料是否相等(不一定型別要相同)
public class Temp {
public static void main(String[] args) {
int i = 10;
int j = 10;
double d = 10.0;
System.out.println(i == j); //true
System.out.println(i == d); //true
boolean b = true;
// System.out.println(i==b);
char c = 10;
System.out.println(i == c); //true
char c1='A';
char c2=65;
System.out.println(c1==c2); //true
}
}
記憶體模型
2.如果比較的是引用資料型別變數,比較兩個物件的地址值 ==> 即兩引用是否指向同一個物件實體
public class Temp {
public static void main(String[] args) {
Customer c1 = new Customer("小明", 20);
Customer c2 = new Customer("小明", 20);
System.out.println(c1 == c2); //false
// String
String str1 = new String("sth");
String str2 = new String("sth");
System.out.println(str1 == str2); // false
}
}
class Customer {
private String namg;
private int age;
public Customer(String namg, int age) {
this.namg = namg;
this.age = age;
}
public String getNamg() {
return namg;
}
public void setNamg(String namg) {
this.namg = namg;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
記憶體模型
2. equals( ) 方法的使用
1.是一個方法.而非運算子
2. 只能適用引用資料型別
Customer 此處使用的是Object 中的equals(), 實際比較的是在棧中的 地址值
public class Temp {
public static void main(String[] args) {
Customer c1 = new Customer("小明", 20);
Customer c2 = new Customer("小明", 20);
System.out.println(c1.equals(c2)); //fasle
}
}
3. 像Sring. Date .File . 包裝類等都重寫領導Object類中的equals( ) 方法. 重寫以後, 比較的不是兩個引用的地址值 是否相同.而是比較兩個物件的 "實體內容’’ 是否相同
4. 通常情況下,我們自定義的類如果使用equals() 的話,也通常比較的是兩個物件的" 實體內容" 是否相同,那麼我們需要對Object類中的equals() 進行重寫
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Customer customer = (Customer) o;
return age == customer.age &&
Objects.equals(namg, customer.namg);
}
總結
== 和equals() 的區別 |
---|
1. == 既可以比較基本型別也可以比較引用型別,對於基本型別就是比較值,對於引用型別及時比較記憶體的地址 |
2. equals的話,他是屬於java.lang.Object類裡面的方法,如果該方法沒有被重寫過預設也是== ,我們可以看到String等類的equals方法是被重寫過的,而且String類在日常開發中用的比較多,久而久之,形成了equasl是比較值的錯誤觀點. |
3. 具體要看自定義類裡面有沒有重寫Object的equals方法來判斷 |
4. 通常情況下,重寫equals方法,會比較類中的屬性是否相等 |
相關文章
- Java面試題 equals()與"=="的區別?Java面試題
- java經典面試題Java面試題
- 【Java】equals 和 == 的區別Java
- 經典Java面試題收集Java面試題
- java 中equals和==的區別Java
- 經典Java面試題收集(二)Java面試題
- Java中 equals() 方法和 == 的區別Java
- Java經典面試題-不古出品Java面試題
- 經典面試題面試題
- Java基礎- ==和equals和hashCode的區別Java
- 經典的Java面試題及回答集錦Java面試題
- Java經典面試題(二)-不古出品Java面試題
- 前端經典面試題前端面試題
- Js 經典面試題JS面試題
- javascript經典面試題JavaScript面試題
- Java面試經典題:執行緒池專題Java面試執行緒
- 【Java面試】@Resource 和 @Autowired 的區別Java面試
- 經典Java面試題彙總及答案解析Java面試題
- 阿里歷年經典Java面試題彙總阿里Java面試題
- ==和equals方法的區別
- [Java面試]經典手撕Java面試
- Java中(==)與equals的區別Java
- Google經典面試題解析Go面試題
- Mysql中的筆試和麵試---20個經典面試題MySql筆試面試題
- JAVA中字串比較equals()和equalsIgnoreCase()的區別Java字串
- [面試題]事件迴圈經典面試題解析面試題事件
- Java開發經典面試題分享,建議收藏Java面試題
- iOS面試題-load 和 initlize的區別iOS面試題
- nginx面試題-nginx和apache的區別Nginx面試題Apache
- 深入探究Java中equals()和==的區別是什麼Java
- 經典 JS 閉包面試題JS面試題
- leetcode-面試經典150題LeetCode面試
- 前端經典面試題(有答案)前端面試題
- 20道JavaScript經典面試題JavaScript面試題
- Runtime經典面試題(附答案)面試題
- Python經典面試題(附答案)!Python面試題
- JavaScript經典面試題詳解JavaScript面試題
- JAVA面試題 StringBuffer和StringBuilder的區別,從原始碼角度分析?Java面試題UI原始碼