1. 程式人生 > >語法糖-自動拆裝箱的陷阱

語法糖-自動拆裝箱的陷阱

		Integer a= 1;
		Integer b =2;
		Integer c= 3;
		Integer d = 3;
		Integer e = 321;
		Integer f = 321;
		Long g = 3L;
		System.out.println(c==d);
		System.out.println(e==f);
		System.out.println(c == (a+b));
		System.out.println(c.equals(a+b));
		System.out.println(g == (a+b));
		System.out.println(g.equals(a+b));

執行結果為:

true
false
true
true
true
false

前兩個是因為在自動裝箱時對於值從-128到127之間的值,它們被裝箱為Integer物件後,會存在記憶體中被重用

中間兩個是因為包裝類的“==”運算在不遇到算數運算的情況下不會自動拆箱

後兩個是因為equals()方法不處理型別的轉換問題。

相關推薦

語法-自動裝箱陷阱

Integer a= 1; Integer b =2; Integer c= 3; Integer d = 3; Integer e = 321; Integer f = 321

關於自動裝箱時的陷阱

1 /* 2 * 自動裝箱的陷阱 3 * 1、兩個包裝類進行比較時,包裝類的"=="運算在不遇到算術運算的情況下不會自動拆箱,如下例若判斷c==g則會報編譯錯誤; 4 * 2、兩個包裝類進行比較時, 包裝類的"equals()"方法不處理資料轉型的關係,如下例的g.equals(a+b)為

自動裝箱,string和基本數據類型的相互轉換

integer sta intval stat ger main package bsp div 1 package com.pang.demo1; 2 3 public class Demo01 { 4 public static void main(

關於java的自動裝箱若幹細節問題

pack 參數 prim gets 調用 store 成對 rac icon 一、首先需要了解的幾個前提: 1、自動裝箱過程是通過調用valueOf方法實現(如Integer.valueOf(10)),而拆箱過程是通過調用包裝器的 xxxValue方法實現(如Integer

Java包裝類的自動裝箱

true space cells 報錯 div ola ack 不同 text 題目: Integer i = 42; Long l = 42l; Double d = 42.0; 下面為true的是 A.(i == l) B.(i

Java支持的數據類型有哪些?什麽是自動裝箱

一個 之間 包裝類 code char 數據 ava 什麽是 布爾型 Java有8種基本數據類型: 整數型:byte(8)、short(16)、int(32)、long(64) 浮點類型:float(32)、double(64) 字符型:char(16位的Unicode字符

一文讀懂什麽是Java中的自動裝箱

.com 空指針異常 http har 三目運算 容器 ava eof 關系 基本數據類型 基本類型,或者叫做內置類型,是Java中不同於類(Class)的特殊類型。它們是我們編程中使用最頻繁的類型。 Java是一種強類型語言,第一次申明變量必須說明數據類型,第一次變量

java自動裝箱,介面和抽象類

1.Java支援的資料型別有哪些?什麼是自動拆裝箱? Java語言支援的8中基本資料型別是: byte short int long float double boolean char 自動裝箱是Java編譯器在基本資料型別和對應的物件包裝型別之間做的一個轉化。比如:把int轉化成Integ

Java自動裝箱(Autoboxing and unboxing)學習

在學習併發的過程中,用“Boolean bool = true”的自動裝箱方式初始化了兩個物件鎖去鎖兩塊程式碼,結果執行的時候出現了競爭等待,除錯了一下發現兩個鎖變數指向的是同一個物件,由此可見我對自動拆裝箱的機制想的太簡單了,查了一下,發現這個機制還挺細節,那就記錄一下: 本文主要有以下幾個方

Java的自動裝箱

基本資料型別 基本型別,或者叫做內建型別,是Java中不同於類(Class)的特殊型別。它們是我們程式設計中使用最頻繁的型別。 Java是一種強型別語言,第一次申明變數必須說明資料型別,第一次變數賦值稱為變數的初始化。 Java基本型別共有八種,基本型別可以分為三類: 字

慎用自動裝箱

先上程式碼: public static void main(String[] args) throws InterruptedException { Integer z = null; printf(z); } public static vo

什麼是Java中的自動裝箱

本文主要介紹Java中的自動拆箱與自動裝箱的有關知識。   1、基本資料型別   基本型別,或者叫做內建型別,是Java中不同於類(Class)的特殊型別。它們是我們程式設計中使用最頻繁的型別。 Java是一種強型別語言,第一次申明變數必須說明資料型別,第

java學習記錄-自動裝箱

自動拆裝箱:Java 編譯器把原始型別自動轉換為封裝類的過程稱為自動裝箱(autoboxing),這相當於呼叫 valueOf 方法 Integer a = 10; Integer b = Integer.valueOf(10); System.out.println(a == b); // tru

自動裝箱-Integer的快取機制

Integer是有小資料快取的機制的,那麼第一個是否應該是true呢? 迴歸下第一個:   Integer num1 = new Integer(100); Integer num2 = new Integer(100

Java學習筆記——包裝類及自動裝箱

在Java中資料分為兩種型別:1.基本資料型別   2.引用資料型別 基本資料型別:   int、double、float、long、byte、boolean、char、short 包裝類就是7種基本資料型別對應封裝起來的類,Integer、Double、Flo

一文讀懂什麼是Java中的自動裝箱

本文主要介紹Java中的自動拆箱與自動裝箱的有關知識。 一、基本資料型別 基本型別,或者叫做內建型別,是Java中不同於類(Class)的特殊型別。它們是我們程式設計中使用最頻繁的型別。 Java是一種強型別語言,第一次申明變數必須說明資料型別,第一次變數賦值稱為變

Java基礎---靜態匯入+增強for迴圈+可變引數+自動裝箱+列舉

靜態匯入      作用:簡化書寫     格式:           import static 包名.類名.靜態成員;           import static 包名.類名.*;     注意:僅對於一個類的靜態成員起作用           靜態匯入的成員與本類的靜態成員同名時,優先本類靜態成員,

探究Java自動裝箱與Cache

目錄 什麼是拆裝箱 JVM是如何實現拆裝箱 聊聊IntegerCache 其他包裝型別的Cache 什麼是拆裝箱 拆裝箱是Java1.5引入的新特性,它是基本資料型別與包裝型別的互相轉化。 裝箱:基本資料型別 => 包裝

數字和字串的轉換,自動裝箱

把數字轉成字串 1.+""; 2.valueOf(); 3.toString(); 把字串轉成數字: 1.intValue(); 2.parse(); 自動裝箱:將基本型別自動包裝成對應的引用型別 自動拆箱:將包裝型別自動轉成對應的基本型別 //手動裝箱 int nu

Integer的自動裝箱問題

@Test     public void test1(){         Integer aInteger=100;         Integer bInteger=100;         System.out.println(aInteger==bInteger)