Java八大基本數據類型


1、數據類型

Java支持數據類型分為兩類: 基本數據類型和引用數據類型。

基本數據類型共有8種,可以分為三類:

  • 數值型:整數類型(byte、short、int、long)和浮點類型(float、double)
  • 字符型:char
  • 布爾型:boolean

8種基本數據類型的默認值、位數、取值范圍,如下表所示:

Float和Double的最小值和最大值都是以科學記數法的形式輸出的,結尾的“E+數字”表示E之前的數字要乘以10的多少倍。比如3.14E3就是3.14×1000=3140,3.14E-3就是3.14/1000=0.00314。

注意一下幾點:

  • java八種基本數據類型的字節數:1字節(byte、boolean)、 2字節(short、char)、4字節(int、float)、8字節(long、double)
  • 浮點數的默認類型為double(如果需要聲明一個常量為float型,則必須要在末尾加上f或F)
  • 整數的默認類型為int(聲明Long型在末尾加上l或者L)
  • 八種基本數據類型的包裝類:除了char的是Character、int類型的是Integer,其他都是首字母大寫
  • char類型是無符號的,不能為負,所以是0開始的

2、自動類型轉換

轉換規則:從存儲范圍小的類型到存儲范圍大的類型。簡言之,由低到高。
具體規則為:byte→short(char)→int→long→float→double

經典面試題

1、short s1 = 1; s1 = s1 + 1;有什么錯? short s1 = 1; s1 +=1;有什么錯?

答案:對於short s1 = 1; s1 = s1 + 1;來說,在進行s1 + 1運算時會自動提升表達式的類型為int,那么將int類型賦值給short類型的變量s1會出現類型轉換錯誤。
對於short s1=1;s1+=1來說, +=是java語言規定的運算符,java編譯器會對它進行特殊處理,因此可以正確編譯。

2、char類型變量能不能儲存一個中文的漢子,為什么?

答案:
char類型變量使用的是Unicode編碼的字符,Unicode字符集包含了漢字,所以char類型當然可以存儲漢字,還有一種特殊情況就是某個生僻字沒有包含在unicode編碼字符集中,那么就char類型就不能存儲該生僻字。

3、Integer和int的區別

答案:
int是java的8種內置的原始數據類型。Java為每個原始類型都提供了一個封裝類,Integer就是int的封裝類。

int變量的默認值為0,Integer變量的默認值為null,這一點說明Integer可以區分出未賦值和值為0的區別,比如說一名學生沒來參加考試,另一名學生參加考試全答錯了,那么第一名考生的成績應該是null,第二名考生的成績應該是0分。關於這一點Integer應用很大的。Integer類內提供了一些關於整數操作的一些方法,例如上文用到的表示整數的最大值和最小值。

4、switch語句能否作用在byte上,能否作用在long上,能否作用在string上?

答案:
byte的存儲范圍小於int,可以向int類型進行隱式轉換,所以switch可以作用在byte上
long的存儲范圍大於int,不能向int進行隱式轉換,只能強制轉換,所以switch不可以作用在long上
string在1.7版本之前不可以,1.7版本之后switch就可以作用在string上了

5、基本數據類型和引用數據類型的區別?

答案:無

6、.64位的JVM當中,int的長度是多少?

答案:Java 中,int 類型變量的長度是一個固定值,與平台無關,都是 32 位。意思就是說,在 32 位 和 64 位 的Java 虛擬機中,int 類型的長度是相同的。

7、可以將int強轉為byte類型么?會產生什么問題?

答案:可以做強制轉換,但是Java中int是32位的而byte是8 位的,所以,如果強制轉化int類型的高24位將會被丟棄,byte 類型的范圍是從-128到128

8、判斷輸出結果

public static void say() {
System.out.println(3 - 2.6 == 0.4);

}
答案:false ->int類型和float類型做運算會損失精度所以不等,可以System.out.println(3 - 2.6 )輸出結果並不等於0.4

9、java 中 float f = 3.4; 是否正確?

答案:不正確,因為3.4是雙精度類型屬於double類型,而double類型范圍大於float類型,如果想要賦給float類型必須強制轉 換:float f=(float)3.4或者float f=3.4F

byte->short->int->long->float->double (范圍從小到大)

10、輸出結果?

byte a = 127;
a+=5;
System.out.println(a);

答案:124。首先byte取值范圍-128~127 當a+=1時此時已經是超過了byte的臨界值此時輸出的為-128 、a+=2時輸出 為-127,以此類推a+=5時輸出為-124,只要記住這個技巧對於這個面試題就可以應對了。

11、為什么long l=2000000000可以,而long l=3000000000卻編譯報錯

答案:因為在Java中二十億和三十億的默認類型都是int類型的,而二十億是在int范圍類的,三十億不在int范圍內,所以后面的long l=300000000會編譯報錯。解決方法:在三十億后面加上一個大寫或者小寫的L

12、為什么 int a = 09;會報錯

答案:因為在進制表示中0開頭的表示八進制,而八進制中不能出現大於7的數!

13、int i = 3000000000; 編譯能通過嗎?原因是什么?(面試題)

答案:不能通過,因為三十億在Java中的默認數據類型為int,而三十億不在int能夠表示的范圍內,所以不能編譯通過

14、輸出結果?

int a=10;
double b=3.4;
System.out.println(a>b?a:b);
System.out.println(a);
//輸出:10.0 10

15、輸出結果?

int a=128;
byte b=(byte)a;
System.out.println(b);//輸出-128,出現了數據溢出

double c=1.23;
int d=(int)c;
System.out.println(d);//輸出1,精度丟失

16、輸出結果?

運算時,運算結果會向較大的類型轉換
int a=3;
double b=4;
System.out.println(a+b);//輸出7.0

17、為什么 byte b=10b會報錯?

答案:byte在java中表示字節,而b表示的是bit

參考博客:https://www.cnblogs.com/oldthree3/p/9088029.html
參考黑馬程序員

本文如果存在錯誤,歡迎大家留言評論。。。。


免責聲明!

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



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