java中八種基本數據類型以及它們的封裝類,String類型的一些理解


    在我們面試或者考試過程中經常會考到八種基本數據類型以及它們的封裝類,那么有哪八種基本數據類型呢?它們的封裝類又是什么呢?

    首先,八種基本數據類型分別是:int、short、float、double、long、boolean、byte、char;它們的封裝類分別是:Integer、Short、Float、Double、Long、Boolean、Byte、Character。

    因為對基本數據類型封裝之后,封裝類有可以有方法和屬性,然后就可以利用這些方法和屬性來處理數據,比如Ingeter對象中有parseInt(String s),可以把字符串轉換為int類型等。我們都知道有些類型的數據會有默認值,基本數據類型跟封裝類型的默認值是不一樣的,比如int i  ,如果不賦值i默認為0;但是Integer j ,如果不賦值,則j 為null;因為封裝類產生的是對象,而對象默認值為null。

     tip:String 類型不是基本數據類型,它實際上是final修飾,所以也不可以繼承。

     String 類型的變量通常有兩種賦值方式:一種直接賦值,例如String a = "hello world";另一種是用構造方法,例如 String b = new String ("hello world");那么這里的a 和b是否相等呢?他們又有什么不同 呢?

     如果用=作比較,則它們不相等,因為“=”比較的是基本數據類型的值是否相等或者比較對象是否為同一個對象;而變量a和變量b指向的是兩個不同的對象,為什么這么說呢?先來理解一下2個變量的賦值過程,對於表達式String a = "hello world",會先創建一個字符串對象“hello world”,而這個字符串實際上是放在字符串緩沖區中,然后把a指向這個對象;而對於String b = new String("hello world");則會創建兩個對象一個是“hello world”這個放在字符串緩沖區中的,另一個是new 方法構造出來的對象new String() 這個對象,新對象中保存的是“hello world”對象罷了,這個對象是放在堆內存中,而b 指向這個new String ()對象,這顯然是不同的兩個對象,所以他們用 “=”比較的結果為false。

    如果用equals()方法比較,這結果為true,因為equals()方法比較的是對象的內容,它們的內容都為“hello world”。

    另外值得提醒的是,字符串緩沖區中對相同的字符串只會存一次。假如我們同時寫了String a ="hello world";String b = new String("hello world");那么字符串緩沖區實際只有一個hello world 字符串,在給b賦值時,會先檢查字符串緩沖區中是否有“hello world”這個字符串,如果有則不創建,直接new String(),然后賦值,因此這種情況下,表達式String  b= new String ("hello world")也只創建了一個對象。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM