1、Java的基本數據類型都有哪些各占有幾個字節?
2、String是基本數據類型嗎?
String是引用類型,底層使用char數組實現的。
3、short s1 = 1; s1 = s1 + 1;有錯嗎?short s1 = 1; s1 += 1有錯嗎;
前者不正確,后者正確。對於short s1 = 1; s1 = s1 + 1;由於1是int類型,因此s1+1運算結果也是int型,需要強制類型轉換才能復制給short型。而short s1 = 1; s1 += 1;可以正確編譯,因為s1 += 1;相當於s1 = (short)(s1+1);其中有隱含的強制類型轉換。
4、int 和Integer有什么區別?
Java是一個近乎純潔的面向對象編程語言,但是為了編程的方便還是引入了基本數據類型,為了能夠將這些基本數據類型當成對象操作,Java為每一個基本數據類型都引入了對象的包裝類型(Wrapper class),int的包裝類就是Integer,從Java5開始引入了自動裝箱/拆箱機制,使得而這可以相互轉換。
Java為每個原始類型提供了包裝類型:
原始類型:boolean,char,byte,short,int,long,float,double
包裝類型:Boolean,Character,Byte,Short,Integer,Long,Float,Double
5、下面Integer類型的數值比較輸出的結果為?
如果不明就里很容易認為兩個輸出要么都是true要么都是false。首先要注意的是f1、f2、f3、f4四個變量都是Integer對象引用,所以下面的==運算符比較的不是值而是引用。裝箱的本質是什么呢?當我們給一個Integer對象賦一個int值的時候,會調用Integer類的靜態方法valueOf,如果看看valueOf的源代碼就知道了什么。
源碼:
IntegerCache是Integer的內部類,其代碼如下所示:
簡單的說,如果整型字面量的值在-128到127之間,那么不會new型的Integer對象。而是直接引用常量池中的Integer對象。
6、String類常用方法
7、String(JDK1.0)、StringBuffer(JDK1.4)、StringBuilder(JDK1.5)的區別?
1)可變不可變
String:字符串常量,在修改時不會改變自身;若修改,等於重新生成新的字符串對象。
StringBuffer:在修改時會改變對象自身,每次操作都是對StringBuffer對象本身就行修改,不是生成新的對象;使用場景:對字符串經常改變的情況下,主要方法有:append(),insert()等。
2)線程是否安全
String:對象定義后不可變,線程安全。
StringBuffer:是線程安全的(對調用方法加入同步鎖),執行效率較慢,適用於多線程下操作字符串緩沖區大量數據。
StringBuilder:是線程不安全的,適用於單線程下操作字符串緩沖區大量數據。
3)公共點
StringBuilder與StringBuffer有公共父類AbstractStringBuilder(抽象類)。
StringBuilder、StringBuffer 的方法都會調用 AbstractStringBuilder 中的公共方法,如 super.append(...)。只是 StringBuffer 會在方法上加 synchronized 關鍵字,進行同步。最后,如果程序不是多線程的,那么使用StringBuilder 效率高於 StringBuffer
8、數據類型之間的轉換?
1)字符串如何轉基本數據類型?
調用基本數據類型對應的包裝類中的方法parseXXX(String)或valueOf(String)即可返回相應基本類型。
2)基本數據類型如何轉字符串?
一種方法是將基本數據類型與空字符串(“”)連接(+)即可獲得所對應的字符串;另一種時調用String類中的valueOf()方法返回相應字符串。