1. 程式人生 > >java基礎-基本資料型別包裝類中的一些坑

java基礎-基本資料型別包裝類中的一些坑

首先來看一段程式碼:

class Demo_04 
{	
	public static void main(String[] args) 
	{
		System.out.println(test(100,100));
		System.out.println(test(500,500));
	}
	public static boolean test(Integer a,Integer b){//自動裝箱
		return a == b;
	}
}

輸出結果如下

看到這個結果有沒有很奇怪?

下面對這個結果做一下分析:

首先,實際引數100是基本資料型別的整數型別,當呼叫靜態方法test進行傳參時,test方法的引數型別是整型的包裝類Integer,因此在對test方法傳參時,會進行自動裝箱(基本資料型別轉換為包裝類成為裝箱,反過程稱為拆箱,jdk1.5之後可以自動將基本資料型別轉換為包裝類,因此成為自動裝箱)。

我們應該清楚,基本資料型別包裝類是引用型別變數,當進行自動裝箱的過程中,java底層會對數值進行判斷,當數值在-128到127時,此時應用變數所指向的是系統提前已經存在於的常量池中的100,也就是說,只要是-128到127範圍內的數值,已經在常量池中存在了,不需要再去建立物件賦值之後再用引用變數指向了(java之父所規定的,他認為這個範圍內的數是常用的);當數值不在這個範圍之內時,再去建立物件。這樣的話,程式中引數是100時,a和b指向的都是常量池中的100,因此地址值相同,==比較的是兩者的地址值,因此返回true。而引數是500時,a和b指向的是不同的物件,因此地址值不同,返回false。

String型別的數值也有類似的情況

以程式碼為例:

class Demo_01 
{
	public static void main(String[] args) 
	{
		String s = "abc";//字串常量 一經建立 不能被改變
		s = "kk";
		System.out.println(s);

		String ss = new String("ff");
		System.out.println(s.equals(ss));
		System.out.println(s==ss);//地址值 false

	}
}

首先字串常量一經建立,就不能被改變,它會存在於記憶體的常量池內,當初始化另一個字串常量時,在儲存之前,會去常量池查詢,如果常量池中存在值相同的字串常量,就不會建立新的,該物件直接指向已經存在的,如果沒有再去建立新的。

相關推薦

java基礎-基本資料型別包裝一些

首先來看一段程式碼: class Demo_04 { public static void main(String[] args) { System.out.println(test(100,100)); System.out.println(test(5

Java基礎——Java筆記——基本資料型別包裝注意

基本資料型別包裝類有8種,其中7種都有parseXxx方法,可以將這7種字串表現形式轉換成基本資料型別 注意:char的包裝類Character中沒有parseXxx方法,字串到字元陣列的轉換用toCharArray() jdk1.5版本後增加了自動裝箱,自動拆箱新特性。

JavaSE_day9_常用API_Object_String_StringBuffer_正則表示式_Date_DateFormat_Calendar_基本資料型別包裝

1.Object類 是Java語言中的根類,即所有類的父類。它中描述的所有方法子類都可以使用。所有類在建立物件的時候,最終找的父類就是Object 方法: equals方法,用於比較兩個物件是否相同,它其實就是使用兩個物件的記憶體地址在比較。Object類中的equals方法內部使用的就

Object、Scanner、String、StringBuffer、Integer基本資料型別包裝

Object類 ==號和equals()的區別 ==是一個比較運算子,能比較基本型別和引用資料型別 ==比較的是兩個值是否相等 ==比較引用資料型別,比較的是,地址值是否相同 equals()是object類中的一種方法,這種方法預設比較的是兩個地址值是否相

java基礎——基本資料型別大小

學習了下大神的總結:https://www.cnblogs.com/TTTTT/p/6541270.html以下記錄了下自己想學習的部分!Java語言提供了八種基本型別。六種數字型別(四個整數型(預設是int 型),兩個浮點型(預設是double 型)),一種字元型別,還有一

String、基本資料型別包裝、集合和泛型

String類: · 字串是一個特殊的物件,在java中只要被雙引號引起來的都是字串物件 · 字串一旦初始化就不可以被改變 · String類複寫了Object類中的equals方法,該用法用於判斷字串是否相同 · String s1 = "abc" 和 String s

java基本資料型別八種

java基本資料型別:四類八種 數值型:整型byteshort int long 非數值:字元型char 浮點型floatdouble 布林boolean 基本資料型別 byte(位元組型) short(短整型)) int(整型) long(長整型) float(浮點

String基本資料型別包裝

-----------android培訓、java培訓、java學習型技術部落格、期待與您交流!------------  第一講     String類 一、概述         String是字

Java 八大基本資料型別以及包裝的詳解

一、java中八種基本資料型別對應的包裝型別:   原始型別 包裝類 原始型別所佔的位元組數    short    Short       2個位元組                        

JAVA字串String、StringBuffer、StringBuilder、基本資料型別包裝 ----java基礎

String 字串: Java中用String類進行描述。對字串進行了物件封裝,這樣的好處是可以對字串這種常見資料進行方便的操作。 字串String一旦被初始化就不可變,儲存位置在記憶體方法區的常量池裡。如果想要改變需要用StringBuffer函式 構造字串的兩種方法:

java基本資料型別與封裝

部落格轉自https://blog.csdn.net/maggiedorami/article/details/7944459     Integer是一個類,是int的封裝類。 int是基本資料型別。 Integer就是把一個int型別的封裝成一個類。

java基本資料型別-四八種

一.四類八種 1.整型:byte   short   int   long 取值範圍: byte < short <int <long 2.浮點型 :float   double 取

基礎資料型別包裝

1、包裝類封裝了相應的基本資料型別數值。 2、基本資料型別4大類8小類對應的包裝類分別為 byte======Byte short====== Short int======Integer long======Long char====== Character boole

java基礎java基本資料型別

java分為基本資料型別和引用資料型別。基本資料型別主演分為四類八種,引用資料型別分為介面,類,陣列,String。 基本資料型別的四類八種是: 整數型別:byte,short,int,long 資料型別 記憶體空間 儲存範圍 byte

Java8 基礎資料型別包裝-Long

基礎 //final修飾不可更改,每次賦值都是新建類(其中-128~127是通過LongCache陣列獲取的不是新建的,所以可以使用==比較,但其他資料是通過new建立的,不能使用==直接比較大小,因為是不同的類,地址不同,需用equals) public

Java基本資料型別與封裝、字串的相互轉換

一、基本資料型別與其對應的封裝類之間的相互轉換 基本資料型別轉換為封裝類 1·直接賦值  (自動打包) Integer i=3;   2·使用封裝類的含參建構函式(例項化) Integer i=new Integer(3);   3·使用封裝類提供的valueOf

python基礎基本資料型別二(set 集合,深淺拷貝)

1、基礎資料型別彙總補充 str int list bool dict tuple 2、集合 set {} 可變的資料型別,(不可雜湊)裡面的元素必須是不可變的資料型別,無序,不重複 以下是集合最重要的兩點:   去重,把一個列表變成集合,就自動去重了。   關係測試,測試兩組資料之前的

基礎 | 基本資料型別與引用資料型別

Java資料型別應該算是最基礎的了,面試時問到的也不是特別多,在此也僅做一個簡單的梳理,大家簡單瀏覽即可。 建議重點關注Java中 「基本資料型別轉換」 的相關問題。 Java有哪些基本資料型別? Java中的基本資料型別只有8個:byte(1位元組)、short(2位

Java基礎語法 - 資料型別

Java是一種強型別語言,針對每一種資料都給出了明確的資料型別 資料型別分類:   A:基本資料型別   B:引用資料型別(類,介面,陣列) 基本資料型別(4類8種): 整形 byte 佔用1個位元組 -128~127 shor

JAVA學習|基本資料型別

JAVA學習|基本資料型別 這裡從變數和常量兩方面來說明Java中的基本資料型別。 變數 變數是記憶體中的容器,用於儲存與讀取資料,同樣也是程式中的最基本儲存單元,其要素包括變數名、變數型別、作用域。 變數必須先定義,後使用。 Java中定義了四類八種資料型別: