Java基礎2:Java數據類型的劃分及其注意事項

1. 基本數據類型:
(1). 數值型
- 整型:byte、short、int、long(默認值0)
- 浮點型:float、double (默認值0.0)
(2). 字符型: char  (默認值 '\u0000')
(3). 布爾型:boolean (默認值false)


2. 引用數據類型

數組、類、接口


3. 基本數據類型的取值範圍

數據類型

關鍵字

字節數

取值範圍

布爾型

boolean

1

true、false

字節型

byte

1

-27 ~ 27 -1

短整型

short

2

-215 ~ 215 -1

整型

int

4

-231 ~ 231 -1

長整型

long

8

-263 ~ 263 -1

字符型

char

2

0 ~ 216 -1

單精度浮點數

float

4

3.402823e+38 ~ 1.401298e-45

雙精度浮點數

double

8

1.797693e+308 ~ 4.9000000e-324


4. 運算溢出現象 :

public static void main(String[] args){

    int max = Integer.MAX_VALUE;

    intmin = Integer.MIN_VALUE;

    System.out.println("MaxValue = "+ max);

    System.out.println("MinValue = "+ min);

    System.out.println("MaxValue + 1 = "+ ++max);

    System.out.println("MinValue -1 = "+ --min);

}

運行結果:

MaxValue = 2147483647

MinValue = -2147483648

MaxValue + 1 = -2147483648

MinValue -1 = 2147483647

 觀察結果可以得出:

最小值減1等於最大值,最大值加1等於最小值。

原理見 計算機中整形和浮點型二進制保存的具體形式


 5. 類型轉換與注意事項:

- 整型數字默認的是int型;浮點型數字默認類型是double類型

- 數據範圍小的類型,可以自動轉換爲數據範圍大的類型;數據範圍大的類型,需要強制轉換爲範圍小的類型。

(1). int類型轉long類型(小轉大)

public static void main(String[] args) {

   intmax = Integer.MAX_VALUE;

   int min = Integer.MIN_VALUE;

   long max1 = max + 1;

   System.out.println("max1 = "+ max1);

}

運行結果:

max1 =-2147483648

原理分析:

long max1 = max +1;先執行max + 1操作, 然後此時得到int值爲 -2147483648 , 然後執行long max1 =  -2147483648。

正確寫法:

long max1 = max +1L;

 

(2). int類型轉byte類型 (大轉小)

public static void main(String[] args) {

   bytebyte1 =11;

   intnum1 =10,num2 =2;

    byte sum = num1 +num2;

   System.out.println("sum= " + sum);

}

首先 : byte byte1 =11;這裏的11是int類型的,但是可以直接賦值給byte,說明byte範圍內的數字,是不需要強制轉換的。但是超過byte範圍的數字需要強制轉換,強制轉換會導致溢出問題。

byte sum = num1 +num2;這裏會編譯失敗,因爲int類型轉換爲byte類型需要強制轉換:bytesum = (byte)(num1 + num2);

 

 

(3). 定義一個float變量

public static void main(String[] args) {

   floatnum =1.1;

   System.out.println("num = "+ num);

}

代碼分析:

float num =1.1;這裏會編譯失敗,定義float需要加上F或f,表示數字類型是float類型,需要修改爲floatnum = 1.1F;

 

 

(4). 浮點數運算精度丟失 , 出現很長的小數問題

public static void main(String[] args) {

   System.out.println("result1 = "+ (3.0-2.6));

   System.out.println("result2 = "+ (0.06 + 0.01));

   System.out.println("result3 = "+ (1.0 - 0.42));

   System.out.println("result4 = "+ (4.015 * 100));

   System.out.println("result5 = "+ (303.1 / 1000));

}

運行結果:

result1= 0.3999999999999999

result2= 0.06999999999999999

result3= 0.5800000000000001

result4= 401.49999999999994

result5= 0.30310000000000004

解決方案: 使用BigDecimal來解決

public static void main(String[] args) {

   BigDecimal num1 = new BigDecimal("3.0");

   BigDecimal num2 =newBigDecimal("2.6");

   System.out.println("result1 = "+ (num1.subtract(num2)));

}

運行結果: result1 =0.4

 

(5). 整數除法計算

public static void main(String[] args) {

   intnum =10;

   double result = num / 4;

   System.out.println("result = "+ result);

}

 

運行結果:

result =2.0

原理分析:

double result = num /4;先執行num/4操作 , 運行結果爲int型2 , 然後執行double result =2 。

正確寫法:

double result = num /4.0;

 

(6). 特殊進制:

public static void main(String[] args){

    intnum =011;

    System.out.println("num = "+ num);

}

運行結果:

num = 9

原理分析:

因爲以0開頭的數字表示是8進制 , 以0x開頭的數字表示是16進制

 

6. char類型

char在java中是16位的,因爲java用的是unicode,而且8位的ASCII碼包含在unicode中,是從0~127。所以java可以保存中文等unicode編碼字符。

public static void main(String[] args) {

   char c ='';

   int index = c;

   System.out.println("index = "+ index);

}

運行結果:  index = 20013

 

7. boolean類型

在java中,boolean就是true和false,不能用數字或者其他類型代替。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章