equals和==在java中的區別
首先要簡單說明一下基本型別和引用型別在JVM中的存放(詳細jvm網上有很多)
基本型別:存放在jvm棧記憶體中
引用型別:在類載入或者例項化(new物件是)時會在堆記憶體中分配空間,引用地址存放在棧記憶體
迴歸正題
"=="操作符的作用
1、用於基本資料型別的比較
2、判斷引用是否指向堆記憶體的同一塊地址。
"equals"操作符的作用1、在引用物件未重寫equals方法和hashcode方法前,比較是否是同一物件(即記憶體地址是否相同)
2.在物件重寫equals方法和hashcode方法後,比較的是兩個物件的內容是否一樣。
直接看例子
public class Main {
public static void main(String[] args) {
//String作為物件使用時
String s1 = new String("111");
String s2 = new String("111");
//String作為基本型別使用時
String s3 = "111";
String s4 = "11"+"1";
System.out.println(s1.equals(s2)); //true
System.out.println(s1.equals(s3)); //true
System.out.println(s1==s3); //false
System.out.println(s1==s2); //false
//當String型別作為基本型別使用時
//如果String緩衝池內不存在與其指定值相同的String物件,那麼此時虛擬機器將為此建立新的String物件,並存放在String緩衝池內。
//如果String緩衝池記憶體在與其指定值相同的String物件,那麼此時虛擬機器將不為此建立新的String物件,而直接返回已存在的String物件的引用。
System.out.println(s3==s4); //true
System.out.println(s3.equals(s4)); //true
//包裝類
Integer i1 = 123;
Integer i4 = 123;
Integer i2 = new Integer(123);
Integer i3 = new Integer(123);
System.out.println(i1==i2); //false
System.out.println(i1.equals(i2)); //true
System.out.println(i2.equals(i3)); //true
System.out.println(i2==i3); //false
System.out.println(i1==i4); //true
int int1 = 111;
int int2 = 111;
System.out.println(s3.equals(int1)); //false
}
相關推薦
Java中equals和hashcode的區別?
equals方法 div true 區別 hash pos post 兩個 不一定 Java中equals和hashcode方法是在Object對象中的,所以每個對象都有這兩個方法,大多數時候我們為了實現特定需求需要重寫這兩個方法 equals和hashcode方法常用在同
java中==和equals和hashcode的區別詳解
style void ted 基本類型 內存 class 存儲 throw rgs 一、相同點 都是用來進行值或對象的比較。 二、不同點 對於“==”而言,對於基本類型(char,byte,short,int,long,float,double
Java中字串比較方法equals()和equalsIgnoreCase()的區別
1. equals() equals( )是比較兩個字串是否相等,它的一般表示式如下: /** * Compares this string to the specified object. The result is {@code * true} if and o
java中==和eqauls()的區別,equals()和`hashcode的區別
==是運算子,用於比較兩個變數是否相等,而equals是Object類的方法,用於比較兩個物件是否相等。預設Object類的equals方法是比較兩個物件的地址,此時和==的結果一樣。換句話說:基本型別比較用==,比較的是他們的值。預設下,物件用==比較時,比較的是記憶體地址,如果需要比較物
JAVA核心技術I---JAVA基礎知識(數字相關類) java中equals和compareTo的區別---解惑
一:相關數字類 –整數 Short, Int, Long –浮點數 Float, Double –大數類 BigInteger(大整數), BigDecimal(大浮點數) –隨機數類 Random 工具類 Math java.math包 二:基本型別回顧 short
java面試(1): java中==和equals和hashCode的區別
1."==" "=="運算子是比較兩個變數的值是否相等。也就是說,該運算子用於比較變數對應的記憶體中所儲存的值是否相等,要比較兩個基礎型別的資料或兩個引用變數是否相等,只能使用"=="運算子。 具體而言,如果兩個變數是基礎
Java中==和equals的區別,equals和hashCode的區別
在java中: ==是運算子,用於比較兩個變數是否相等。 equals,是Objec類的方法,用於比較兩個物件是否相等,預設Object類的equals方法是比較兩個物件的地址,跟==的結果一樣。Ob
java中==和equals和hashCode的區別
1.概念 ==:操作符,比較兩個物件之間的數值關係,返回boolean型別 equals:Object類的方法,比較兩個物件內容關係,返回boolean型別 hashCode:Object類的方法,返回物件的hash值 2.具體分析 2.1 ==
Java中equals和==的區別,equals和hashcode的區別
Java中的資料型別,可分為兩類: 1.基本資料型別,也稱原始資料型別。byte,short,char,int,long,float,double,boolean 他們之間的比較,應用雙等號(==),比較的是他們的值。 2.複合資料型別(類) 當他們用(==)進行比較
Java == ,equals 和 hashcode 的區別和聯系
應對 哈希表 返回對象 com 總結 子類 return 地址 內存 1. == java中的==是比較兩個對象在JVM中的地址。比較好理解。看下面的代碼: public class ComAddr{ public static void main(St
Unix時間戳和Java中的時間戳的區別
前言 最近在使用阿里的日誌服務時,遇到了一些Java中Timestamp的坑,所以特意做了瞭解並整理了一下。在這之前首先得介紹一下Unix時間戳: Unix時間戳是從1970年1月1日(UTC
C++純虛擬函式和Java中的抽象函式區別
一直我對c++純虛擬函式的理解有個誤區:純虛擬函式是不能給出定義的。果然是學藝不精。c++中的純虛擬函式和java中的抽象函式很類似,我把相關概念搞混淆了,這裡總結一下:java中的抽象函式是隻有函式
Android中自帶的RSA加密演算法和JAVA中的區別
java Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); android Cipher cipher = Cipher.getInstance("RSA/ECB/NoPadding"); 參考: http://stackoverflow
js和java中陣列的區別和定義方式
區別:java中:定義陣列必須指定長度,而且長度確定下來之後無法改變。 js中:js中的陣列和java中的集合差不多,長度是可變的,也沒有強制要求必須定義長度。 定義方法:java: int a[] = new int[3];//定義一個新陣列
Android中ClassLoader和java中有什麼關係和區別
ClassLoader 簡介 對於 Java 程式來說,編寫程式就是編寫類,執行程式也就是執行類(編譯得到的 class 檔案),其中起到關鍵作用的就是類載入器 ClassLoader。 任何一個 Java 程式都是由若干個 class 檔案組成的一個完整的 J
2018_05_29 Objects中equals和deepEquals的區別
Object的equals()方法比較的是物件在記憶體中的地址是否相同,只有引用同一塊地址的時候,才會為true,例如String a1 = "hello";String a2 = "hello";a1.equals(a2);結果為truePerson p1 = new P
C#和JAVA中編寫事務代碼
com creat .class eas ++ acc data savepoint return C# DAL層代碼,運行多條增刪改,使用事務操作: /// <summary> /// 運行 多條增刪改 (非查詢語句)
js和java中使用正則表達式校驗郵箱
reg 表達 mat 表達式 正則表達式 javascrip 格式 正則 pri 問題:經常在項目中要校驗郵箱? 郵箱格式:首位必須為字母,必須包含一個@符號,並且@之後有個名字,之後還有個.,再有一個後綴名 例如:[email protected] 一、java
python源代碼和java的區別
技術 body wiki java編譯 url png 分享 args blank 解釋器是用C寫的;而java編譯器就是java寫的 類似這種,不看也罷。 不過我用編輯器寫的時候,會出現一些友好的提示,比如sum可傳2個參數,一個iterable,一個start。 所
php和java中的加密和解密
padding 而不是 bsp enc openss 解密 div des算法 -c 遇到的java代碼如下: Cipher cipher=Cipher.getInstance("DESede/CBC/PKCS5Padding"); 在php中使用des算法 始終校驗不