1. 程式人生 > >java基本型別和基本型別包裝型比較時的自動拆箱和自動裝箱

java基本型別和基本型別包裝型比較時的自動拆箱和自動裝箱

java中,任何物件都繼承自Object,所以都有equals()方法。在基本型別中,兩個數值之間的比較==和equals()方法,比較的都是兩個運算元的地址,地址相同,則返回值為true。在物件中,不管是自己寫的物件還是java中已經有的物件,如果這個類物件複寫了繼承自Object類的equals()方法,將原地址比較改為內容比較,那麼物件在使用equals()比較時,則比較的不再是兩個物件的地址,而是比較的兩個物件的儲存內容。比如,String類,它複寫了equals()方法,所以使用equals()方法比較兩個字串時,比較的是兩個字串的內容,但使用==比較的還是兩個字串的地址,這一點還是不變的。

接下來我們要看的是基本型別和它對應的封裝型別比較時出現的自動拆箱和自動裝箱問題。

1、比較表示式符號:==或者equals

2、比較表示式:

基本型別==基本型別的封裝型別;

基本型別封裝型別.equals(基本型別);

3、基本型別:byte,int,對應封裝型別:Byte,Integer;

程式碼如下:

/**
 * Created by cxh  on 17/07/21.
 */
public class Main {
    public static void main(String argv[]){
        Main test=new Main();
Integer i1=100;
Integer i2=128; Integer i3=-128; Integer i4=127; Integer i9=127; Integer i10=128; int i5=100; int i6=128; int i7=-128; int i8=127; Byte b1=-128; Byte b2=127; Byte b3=127; byte b4=-128; byte b5=127; byte b6=127; //封裝型別==基本型別:封裝型別先拆箱為基本型別,再進行數值上的比較. System.out
.println(i1==i5); System.out.println(i2==i6); System.out.println(b1==b4); System.out.println(b2==b5); //封裝型別.equals(基本型別):基本型別先裝箱為包裝型別,如果基本型別不為空且數值和封裝型別相同,則返回true /**Integer對應的原始碼: * public boolean equals(Object obj) { if (obj instanceof Integer) { return value == ((Integer)obj).intValue(); } return false; } */ System.out.println(i1.equals(i5)); System.out.println(i2.equals(i6)); System.out.println(b1.equals(b4)); System.out.println(b2.equals(b5)); //封裝型別.equals(封裝型別):先進行型別,型別相同的情況下,再比較值,如果值也相同,則返回true System.out.println(i3.equals(i7)); System.out.println(i4.equals(i8)); System.out.println(b3.equals(b6)); //封裝型別==封裝型別:Integer值如果在-128-127,則返回true,這和Integer.valueOf()的緩衝物件有關.否則返回false; System.out.println(i9.equals(i4)); System.out.println(i3.equals(i10)); } }

結果如下:

true
true
true
true
true
true
true
true
true
true
true
true
false


Process finished with exit code 0

相關推薦

java基本型別基本型別包裝比較自動自動裝箱

java中,任何物件都繼承自Object,所以都有equals()方法。在基本型別中,兩個數值之間的比較==和equals()方法,比較的都是兩個運算元的地址,地址相同,則返回值為true。在物件中,不管是自己寫的物件還是java中已經有的物件,如果這個類物件複寫了繼承自O

Java基本資料型別的大小,他們的封裝類以及自動裝箱

Java提供了一套基本資料型別,總共有八種,也會有人說是有九種。 在我們的印象中,很多人可能會說出byte,short,int,long,float,double,boolean,char這八種資料型別。 那麼還有一種是哪種呢,它到底是不是資料型別呢? 我們很容易忽略一個void,有

java 1.5 自動裝箱的注意事項

背景 java1.5後引入了自動裝箱和自動拆箱的概念 自動拆箱:將引用型別轉化為基本資料型別 自動裝箱:將基本資料型別裝為引用型別 但是實際使用中,什麼情況自動拆箱什麼情況自動裝箱呢? 自動裝箱 Integer i = 100; (呼叫Integer.valueOf(100)) 這裡存

Integer的自動自動裝箱的陷阱(整數-128到127的值比較問題)

Integer的自動拆裝箱的陷阱(整型數-128到127的值比較問題): 1、先看下面的例子: package integerdemo;   publicclass IntegerDemo {       publicstaticvoid main(String[] args) {         

java自動裝箱自動正常情況效能比較

自動裝箱和自動拆箱是java5.0版本引入的,能自動將基本型別轉換為對應的基本型別包裝物件,那麼我們比較一下他們的效能情況。 package com.wmmad.test; import junit.framework.TestCase; /** * @author ma

如何理解Java中的自動自動裝箱

小偉剛畢業時面的第一家公司就被面試官給問住了... 如何理解Java中的自動拆箱和自動裝箱? 自動拆箱?自動裝箱?什麼鬼,聽都沒聽過啊,這...這..知識盲區... 回到家後小偉趕緊查資料,我透,這不就是問基本型別跟封裝型別嗎,面試官整啥名詞呢... 別問結果,問就是沒過。 1、 什麼是自動裝箱,自動拆箱 定

11、自動裝箱

什麼是自動拆箱和自動裝箱? //自動裝箱:把基本型別轉換為包裝類型別 Integer s1 = 123; //自動拆箱:把包裝類型別轉換為基本型別 Integer s2 = new Integer(10);

Java學習筆記 (十五) 自動自動裝箱

什麼是自動拆裝箱 自動裝箱: 就是將基本資料型別自動轉換成對應的包裝類. 自動拆箱:就是將包裝類自動轉換成對應的基本資料型別。 For example : Integer a=1; //自動裝箱 int b=a; //自動拆

JavaScript基本包裝型別(自動裝箱自動)(instanceof方法)

1)為了便於操作基本型別值,ECMAScript提供了3個特殊的引用類Boolean, Number, String每當讀取一個基本型別值的時候,後臺就會建立一個對應的基本包裝型別物件,從而可以使我們呼叫一些方法操作這些資料。 在建立變數s後(var s =

基本資料型別包裝類及String三者之間的相互轉化(自動轉化)

1.基本資料型別和包裝類之間的轉化 //基本資料型別---->對應的包裝類:呼叫包裝類的構造器 @Test public void test() { int i = 10; Integer

自動&自動裝箱以及String 基本資料型別封裝類生成的物件是否相等

自動拆箱(unboxing)&自動裝箱(boxing) @author 李東秀|| qq:1028659927 本文主要為自己理解所做的學習筆記,如有不對的地方, 望各位看官不吝指出,程式碼執行環境:Ubuntu 14.04,jdk1.7版本         在j

自動裝箱自動,基本資料型別

  https://www.cnblogs.com/dolphin0520/p/3780005.html 比較相等大小看這篇https://www.cnblogs.com/wang-yaz/p/8516151.html ==  物件完全相等,比較是否同個記憶體地址 equal&nb

Java設計模式之五大創建模式(附實例詳解)

caf aac concrete 為什麽 ota pil sem 而不是 rtm 一、概況 總體來說設計模式分為三大類: (1)創建型模式,共五種:工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式。 (2)結構型模式,共七種:適配器模式、裝飾器模式、代理模式

JAVA高階特性--自動-裝箱,列舉型別

基本資料型別轉換為引用型別物件 一個自動裝箱的例子 Integer i=10; 相當於 Integer i=new Integer(10);   一個自動拆箱的例子 Integer m=10; int n=m; 相當於n=m.intValue();  

6個關於Java包裝裝箱的判斷題,你能做對幾個?

雖然 Java 語言是典型的面向物件程式語言,但其中的八種基本資料型別並不支援面向物件程式設計,基本型別的資料不具備“物件”的特性——不攜帶屬性、沒有方法可呼叫。為此,Java為每種基本資料型別分別設計了對應的類,稱之為包裝類(Wrapper Classes)。 裝箱(Box

自動裝箱自動,基本數據類

調用 無法 定義 ole 比較 url參數傳遞 包裝類 ger 包裝 https://www.cnblogs.com/dolphin0520/p/3780005.html 比較相等大小看這篇https://www.cnblogs.com/wang-yaz/p/85161

JAVA一切皆對象之包裝類、自動裝箱自動

對象 包裝類 強制 用戶 類型轉換 自動轉換 方法 img 無需 每個基本類型都有一個對應的類;就是所謂的包裝類; 1,裝箱和拆箱 基本類型和類類型可以相互轉換; 基本類型到類類型的轉換叫做裝箱; 類類型到基本類型的轉換叫做拆箱; 2,自動裝箱和拆箱 在類類型

java裝箱

手工 enc bsp 簡潔 實現 lan 開始 spa 徹底 1.自動裝箱和自動拆箱 - 指的是原始類型和封裝類型相互轉換。 2. 為什麽要擁有裝箱和拆箱機制? - 使java代碼更加徹底地面向對象 - 從jdk1.5以後開始支持,使代碼更加簡潔,

Java支持的數據類有哪些?什麽時候自動

回來 ring 但是 cache rep 位置 ++ 提高 自動拆箱 java中的8種基本數據類型:boolean byte char short int float double long 自動拆裝箱的問題引入: 由於在一開始學習java的時候,”萬物皆對象“這種

Java中的裝箱

基本數據 JD 基本數據類型 AS val 類型 sys 裝箱 數據 一.拆箱和裝箱的概念   裝箱:將基本數據類型的值轉為引用類型的值;   拆箱:將引用類型的值轉換為基本數據類型的值; 二.實例演示 public class Example19 { public