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中定義了四類八種資料型別: