基本類型可以分爲三類:
字符類型char;
布爾類型boolean;
數值類型byte、short、int、long、float、double。
數值類型又可以分爲整數類型byte、short、int、long和浮點數類型float、double
1、布爾型
boolean類型不可以轉換成其他的數據類型,不可以以0或非0的數字代替;
2、整數型
整型默認爲int型,而long類型表示的範圍要超出int表數範圍,所以,聲明long類型時,常量後要加L
如:long l1=12345678 // 數值在int範圍之內,還不會出錯
long l2=8888888888;// 數值在int範圍之外,會出錯
long l3=8888888888L; //正確
3、浮點型
浮點型默認爲double,所以float類型聲明時後面需要加f/F
; 或者用強制轉換符
如:float f1 = (float)0.1;
float f2 = 0.1f;
二、基本數據類型轉換:
各數據類型按容量大小(表數範圍大小)由小到大排列爲:
Byte, short, char ——int ——long——float——double
1.轉換時遵循的原則:
1)容量小的類型自動轉換爲容量大的類型;
2)容量大的類型轉換爲容量小的類型時,要加強制轉換符;
3)byte,short,char之間不會互相轉換,並且三者在計算時首先轉換爲int類型;
4)實數常量默認爲double類型, 整數常量默認爲int類型;
* 字符型 爲什麼也能和 整形、浮點型進行運算呢?
答: 字符型在機器內部也是數字。進行計算時,先獲得字符的ASCK碼,然後再進行計算。
2.轉換舉例:
Int i1=123;
Int i2=456;
Double d1 = (i1+i2)*1.2 //容量小的類型自動轉換爲容量大的類型
Byte b1=1;
Byte b2=2;
Byte b3=(byte)(b1+b2); //byte,short,char在計算時首先轉換爲int,大容量(int)轉換爲小容量的類型(byte)時要加強制轉換符
典型問題:
(1) double d = 1e200;//打印顯示Infinity;
(2) float f = 11.1//錯誤;默認爲double類型,應該修改爲float f = 11.1f;
(3)public class TestDataKind {
public static void main(String[] args) {
byte b = 44;
char c = 'b';
short s = 1024;
int i = 40000;
long l = 12463l;
float f = 35.67f;
double d = 3.1234d;
/*
* (f * b)時,b自動提升爲float類型 (l*f)時,l自動提升爲float類型 (i/c)
*時,c自動提升爲int類型
* (d*s)時,s自動提升爲double類型 再相加時,中間結果都變爲了double類型。
* 這裏result只能聲明爲double類型,result聲明爲其他類型會出錯,除非進行
*強制類型轉換
*/
double result = (f * b) + (l * f) + (i / c) - (d * s);
System.out.print((f * b) + " + " + (l * f) + " + " + (i /
c) + " - " + (d * s));
System.out.println(" = " + result);
}
}
(4) byte b1 = (byte)128;
byte b2 =(byte)-129;
System.out.println(b1);
System.out.println(b2);
打印結果:-128和127
分析:byte只有八位,只能表示-128—127;計算機中負數的存儲方式是補碼。對負數的絕對值的二進制值取反,再加一,即爲負數的二進制碼。如:-1的絕對值1的二進制碼爲00000001,取反得到11111110,再加一爲11111111。-128的絕對值128的二進制碼爲10000000,取反得到01111111,再加一爲10000000,正好是Byte的最大表示範圍。而-129的絕對值129的二進制碼爲10000001,取反後得01111110,加一後得01111111,最後結果就是127