1. 程式人生 > >equals和==在java中的區別

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

    }


相關推薦

Javaequalshashcode的區別

equals方法 div true 區別 hash pos post 兩個 不一定 Java中equals和hashcode方法是在Object對象中的,所以每個對象都有這兩個方法,大多數時候我們為了實現特定需求需要重寫這兩個方法 equals和hashcode方法常用在同

java==equalshashcode的區別詳解

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基礎知識(數字相關類) javaequalscompareTo的區別---解惑

一:相關數字類 –整數 Short, Int, Long –浮點數 Float, Double –大數類 BigInteger(大整數), BigDecimal(大浮點數) –隨機數類 Random 工具類 Math java.math包 二:基本型別回顧 short

java面試(1): java==equalshashCode的區別

1."=="     "=="運算子是比較兩個變數的值是否相等。也就是說,該運算子用於比較變數對應的記憶體中所儲存的值是否相等,要比較兩個基礎型別的資料或兩個引用變數是否相等,只能使用"=="運算子。     具體而言,如果兩個變數是基礎

Java==equals區別equalshashCode的區別

在java中: ==是運算子,用於比較兩個變數是否相等。 equals,是Objec類的方法,用於比較兩個物件是否相等,預設Object類的equals方法是比較兩個物件的地址,跟==的結果一樣。Ob

java==equalshashCode的區別

1.概念 ==:操作符,比較兩個物件之間的數值關係,返回boolean型別 equals:Object類的方法,比較兩個物件內容關係,返回boolean型別 hashCode:Object類的方法,返回物件的hash值 2.具體分析 2.1 ==

Javaequals==的區別equalshashcode的區別

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

jsjava陣列的區別定義方式

區別:java中:定義陣列必須指定長度,而且長度確定下來之後無法改變。            js中:js中的陣列和java中的集合差不多,長度是可變的,也沒有強制要求必須定義長度。 定義方法:java: int a[] = new int[3];//定義一個新陣列

AndroidClassLoaderjava有什麼關係區別

ClassLoader 簡介 對於 Java 程式來說,編寫程式就是編寫類,執行程式也就是執行類(編譯得到的 class 檔案),其中起到關鍵作用的就是類載入器 ClassLoader。 任何一個 Java 程式都是由若干個 class 檔案組成的一個完整的 J

2018_05_29 ObjectsequalsdeepEquals的區別

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> /// 運行 多條增刪改 (非查詢語句)

jsjava使用正則表達式校驗郵箱

reg 表達 mat 表達式 正則表達式 javascrip 格式 正則 pri 問題:經常在項目中要校驗郵箱?   郵箱格式:首位必須為字母,必須包含一個@符號,並且@之後有個名字,之後還有個.,再有一個後綴名   例如:[email protected]   一、java

python源代碼java區別

技術 body wiki java編譯 url png 分享 args blank 解釋器是用C寫的;而java編譯器就是java寫的 類似這種,不看也罷。 不過我用編輯器寫的時候,會出現一些友好的提示,比如sum可傳2個參數,一個iterable,一個start。 所

phpjava的加密解密

padding 而不是 bsp enc openss 解密 div des算法 -c 遇到的java代碼如下: Cipher cipher=Cipher.getInstance("DESede/CBC/PKCS5Padding"); 在php中使用des算法 始終校驗不