【JAVA面試題】== 和 equals() 的區別與使用場景

在 Java 面試中,==equals() 的區別是一個高頻考點。理解它們的底層原理和使用場景,對于掌握 Java 基礎知識至關重要。本文將從 基本概念底層實現實際應用 三個方面,深入解析 ==equals() 的區別。


1. 基本概念

1.1 == 運算符

  • 作用:比較兩個變量的值。
  • 比較規則
    • 對于 基本數據類型(如 intchar 等),比較的是變量的
    • 對于 引用數據類型(如 StringObject 等),比較的是變量的 內存地址

1.2 equals() 方法

  • 作用:比較兩個對象的內容是否相等。
  • 默認實現
    • Object 類中的 equals() 方法默認使用 == 進行比較。
    • 大多數類(如 StringInteger 等)會重寫 equals() 方法,改為比較對象的內容。

2. 底層實現

2.1 == 的底層實現

  • 基本數據類型:直接比較值。
    int a = 10;
    int b = 10;
    System.out.println(a == b); // true
    
  • 引用數據類型:比較內存地址。
    String str1 = new String("Hello");
    String str2 = new String("Hello");
    System.out.println(str1 == str2); // false
    

2.2 equals() 的底層實現

  • Object 類的默認實現
    public boolean equals(Object obj) {return (this == obj);
    }
    
  • String 類的重寫實現
    public boolean equals(Object anObject) {if (this == anObject) { // 如果是同一個對象,直接返回 truereturn true;}if (anObject instanceof String) { // 判斷是否為 String 類型String anotherString = (String) anObject;int n = value.length;if (n == anotherString.value.length) { // 比較字符數組長度char v1[] = value;char v2[] = anotherString.value;int i = 0;while (n-- != 0) { // 逐個比較字符if (v1[i] != v2[i])return false;i++;}return true;}}return false;
    }
    

3. 實際應用

3.1 == 的使用場景

  • 比較 基本數據類型 的值。
  • 比較 引用數據類型 的內存地址(判斷是否為同一個對象)。

3.2 equals() 的使用場景

  • 比較 引用數據類型 的內容是否相等。
  • 需要重寫 equals() 方法以實現自定義比較邏輯。

3.3 示例代碼

public class StringDemo {public static void main(String[] args) {String str1 = "Hello";String str2 = new String("Hello");String str3 = str2; // 引用傳遞System.out.println(str1 == str2); // false(內存地址不同)System.out.println(str1 == str3); // false(內存地址不同)System.out.println(str2 == str3); // true(內存地址相同)System.out.println(str1.equals(str2)); // true(內容相同)System.out.println(str1.equals(str3)); // true(內容相同)System.out.println(str2.equals(str3)); // true(內容相同)}
}

4. 常見面試問題

4.1 == 和 equals() 的區別是什么?

  • == 比較的是棧中的值(基本數據類型是值,引用類型是內存地址)。
  • equals() 比較的是對象的內容(默認使用 ==,但通常會被重寫)。

4.2 String 類的 equals() 方法是如何實現的?

  • 先比較內存地址,如果相同則返回 true
  • 再比較字符數組的長度和內容,如果完全相同則返回 true,否則返回 false

4.3 如何重寫 equals() 方法?

  • 重寫 equals() 方法時,通常需要滿足以下條件:
    1. 自反性x.equals(x) 必須為 true
    2. 對稱性:如果 x.equals(y)true,則 y.equals(x) 也必須為 true
    3. 傳遞性:如果 x.equals(y)true,且 y.equals(z)true,則 x.equals(z) 也必須為 true
    4. 一致性:多次調用 x.equals(y) 的結果必須一致。
    5. 非空性x.equals(null) 必須為 false

5. 總結

  • ==:用于比較基本數據類型的值或引用類型的內存地址。
  • equals():用于比較對象的內容,通常需要重寫以實現自定義邏輯。
  • String 類的 equals():比較字符串的內容,是重寫 equals() 方法的典型示例。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/71232.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/71232.shtml
英文地址,請注明出處:http://en.pswp.cn/web/71232.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

-bash: lsof: command not found

一、問題說明 執行如下命令時報錯: # lsof |grep deleted > deleted_file -bash: lsof: command not found二、處理方法 # yum -y install lsof安裝完成后可成功執行上面的命令。

攝像頭應用編程(三):多平面視頻采集

文章目錄 1、前言2、環境介紹3、步驟4、應用程序編寫5、測試5.1、編譯應用程序5.2、運行應用程序 6、總結 1、前言 在查看攝像頭類型時,大致可以分為兩類:Video Capture 和 Video Capture Multiplanar。 本次應用程序主要針對類型為Video Capture Multi…

本地部署 Traefik 的完整教程

Traefik 是一款現代化的反向代理和負載均衡工具,專為云原生環境設計。它支持自動服務發現、動態配置更新以及多種后端(如 Docker、Kubernetes、Consul 等)。本教程將指導你如何在本地部署 Traefik,并配置其作為反向代理和負載均衡器。 1. 準備工作 在開始之前,請確保你的…

三維數據可視化與表面重建:Marching Cubes算法的原理與應用

1. 引言 隨著現代醫學影像技術的飛速發展,三維數據的可視化與重建已成為醫學研究、臨床診斷和手術規劃的重要工具。在眾多三維重建算法中,Marching Cubes算法因其高效、穩定的特性成為從離散數據場中提取等值面的經典方法。本報告將深入探討Marching Cu…

MySql面試總結(二)

WHERE 子句優化 截至2024年7月,MySQL最新穩定版本是8.2,并不存在MySQL 8.4 。下面從常見的幾個方面為你介紹 MySQL 8.x 中 WHERE 子句的優化方法: 1. 確保使用索引 原理:索引可以加快數據的查找速度,當 WHERE 子句中的條件列有索引時,MySQL 可以直接定位到符合條件的數…

【圖論】判斷圖中有環的兩種方法及實現

判斷圖中有環的兩種方法及實現 在圖論中,檢測有向圖是否存在環是常見問題。本文將介紹兩種主流方法:DFS三色標記法和拓撲排序(Kahn算法),并提供對應的C代碼實現。 方法一:DFS三色標記法 核心思想 通過深…

11.【線性代數】——矩陣空間,秩1矩陣,小世界圖

十一 矩陣空間,秩1矩陣,小世界圖 1. 矩陣空間交集 和 和集 2. 所有解空間3. r 1 r1 r1的矩陣4. 題目5. 小世界圖 空間:組成空間的元素的線性組合都在這個空間中。 1. 矩陣空間 舉例:矩陣空間( M M M 所有3x3的矩陣&…

【網絡安全 | 滲透測試】GraphQL精講一:基礎知識

未經許可,不得轉載, 文章目錄 GraphQL 定義GraphQL 工作原理GraphQL 模式GraphQL 查詢GraphQL 變更(Mutations)查詢(Queries)和變更(Mutations)的組成部分字段(Fields)參數(Arguments)變量別名(Aliases)片段(Fragments)訂閱(Subscriptions)自省(Introspecti…

關于虛擬環境中遇到的bug

conda和cmd介紹 介紹 Conda 概述: Conda是一個開源包管理系統和環境管理系統,尤其適用于Python和R語言的開發環境。它允許用戶創建獨立的虛擬環境,方便地管理依賴包和軟件版本。 特點: 環境管理:可以創建、導入、導…

基于nginx的灰度發布解決方案

Nginx 在灰度發布中可以看作是一個精確的流量調度員,它充當著客戶端與后端服務器之間的中介。通過配置好的規則,Nginx 會將用戶請求智能地引導到不同版本的服務上。這樣,Nginx 可以根據具體需求靈活地分配流量,確保新版本逐步推向…

網絡安全法與等級保護 PPT 精華匯總

資源描述 本資源文件為《網絡安全法與等級保護》的PPT精華匯總,內容涵蓋了網絡安全法與等級保護的總體框架及相關標準規范。該PPT詳細介紹了網絡安全法與等級保護的各個章節和條款,并提供了基礎類和應用類的相關標準文件,幫助讀者全面了解和…

uni-app開發安卓和iOS 打包流程(云打包)

首先講一下安卓打包的流程,之后再說ios。打包安卓和iOS打包的流程有些不同,安卓打包相對來說比較簡單,而iOS打包需要更多的準備工作,如申請開發者賬號、生成證書等。 一、安卓打包 1、安卓打包直接在window電腦上就可以操作,打開hbuilderx,找到你的項目選中,然后點擊發…

攝像頭應用編程(四):ARM Linux LCD實時預覽UVC攝像頭畫面

文章目錄 1、前言2、環境介紹3、步驟4、應用程序編寫4.1、lcd初始化4.2、攝像頭初始化4.3、jpeg解碼4.4、開啟攝像頭4.5、完整的程序如下 5、測試5.1、編譯應用程序5.2、運行應用程序 6、總結 1、前言 本次應用程序主要針對支持MJPEG格式輸出的UVC攝像頭。 2、環境介紹 rk35…

藍橋與力扣刷題(藍橋 k倍區間)

題目:給定一個長度為 N 的數列,A1,A2,?AN?,如果其中一段連續的子序列 Ai,Ai1,?Aj( i≤j ) 之和是 K 的倍數,我們就稱這個區間[i,j] 是 K 倍區間。 你能求出數列中總共有多少個 K 倍區間嗎? 輸入描述 第一行包含兩…

json介紹、python數據和json數據的相互轉換

目錄 一 json介紹 json是什么? 用處 Json 和 XML 對比 各語言對Json的支持情況 Json規范詳解 二 python數據和json數據的相互轉換 dumps() : 轉換成json loads(): 轉換成python數據 總結 一 json介紹 json是什么? 實質上是一條字符串 是一種…

PAT乙級真題 / 知識點(1)

引言: 起初,報PAT是伙伴推薦。但在報名路途中,有朋友說,花時間到這上面不值得,還有學長說沒聽過,野雞杯。 我一笑而過,我可能就是偏執,我就是想報。隨著刷真題,我的基礎…

單細胞分析(20)——inferCNV分析

InferCNV分析筆記 1. 分析目標 InferCNV(Inference of Copy Number Variations)是一種基于單細胞轉錄組數據推斷**拷貝數變異(CNV)**的方法,推測其基因組變異情況。 2. 數據準備 2.1 載入數據 library(Seurat) set…

C++:多態與虛函數

1.虛函數,在函數前加virtual即可。有虛函數時,父類指針指向父類對象時就會使用父類的成員,指向子類對象時就可以使用子類成員,進而我們引入了多態的概念。 2.多態:父類指針指向子類的對象,通過父類指針調用…

WSL下使用git克隆失敗解決

WSL默認nat模式,別動了防火墻放行,見圖1git導入[bash1],ip為你wsl上linxu通過ifconfig獲取的本機ip,端口對好某alcsh軟件開啟tun模式【經過測試,不開也行】應該成了,如果不行,修改.wslconfig為下…

開放鴻蒙OpenHarmony 5.0.0 Release 兼容性測試實戰經驗分享

OpenHarmony 5.0版本的發布時間是2024年12月20日至21日。這個版本帶來了許多新特性和改進。現在5.0出了兩個release 版本,分別是5.0.0和5.0.1。 就在5.0版本發布不到2周的時間內,2025年01月01日起,不支持新產品基于老分支(OpenHar…