Java數據類型是最基礎的部分,也是最容易忽視的重要部分。Java是強類型語言,因而對數據類型的掌握也提出了很高的要求。本文主要內容包括:
- Java數據類型構成
- 基本數據類型
- 基本數據類型之間的類型轉換
- String不是基本數據類型
1.Java數據類型構成
Java數據類型分爲兩大類:基本數據類型和引用數據類型。
基本數據類型包括:
- 整型: byte \ short \ int \ long
- 浮點型: float \ double
- 字符型: char
- 布爾型: boolean
引用數據類型包括: - 類(class)
- 接口(interface)
- 數組(array)
2.基本數據類型
2.1整型數據
類型 | 佔用存儲空間 | 表數範圍 |
---|---|---|
byte | 1字節=8bit位 | -128~127 |
short | 2字節 | -215~215-1 |
int | 4字節 | -231~231-1(約21億) |
long | 8字節 | -263~263-1 |
基本要求:
- Java中的整型常量默認爲int型,聲明long型常量必須加"L"或"l"結尾。
- Java中程序變量通常聲明爲int型,除非不足以表示爲較大的數,才使用long型。
- byte很容易超出範圍。
byte b1=12;
byte b2=128;//超出範圍,出錯
long num=22412414L;//聲明long型常量必須加"L"或"l"結尾
2.2浮點型
通常帶有小數點的數字稱爲浮點型。
類型 | 佔用存儲空間 | 表數範圍 |
---|---|---|
float | 4字節 | -3.403E38~3.403E38 |
double | 8字節 | -1.798E308~1.798E308 |
注意:
1. float:
- 單精度,尾數可以精確到7位有效數字,很多情況下,難以滿足要求
- 聲明float常量,必須加"F"或"f"結尾。
- float表示的數值範圍比long型還要大。
2.double
- 雙精度,精度是float的兩倍,通常採用此類型。
double d1=123.3;
float f1=12.3f;//必須加"F"或"f"結尾
2.3字符類型 char
char 使用注意事項
- char 1字符=2個字節
- 定義char型變量,通常使用一對單引號—— ''
- char的三種表現形式
- 單個字符
- 轉義字符: \n \t
- 直接使用Unicode值來表示字符型常量;’\uXXXX’,其中XXXX表示一個十六進制的整數,例如,\u000a表示\n;
char c1='a';
char c2='1';
char c3='中';
char c4='の';
char c5='\n';//換行
char c6='\t';//製表符
char c7='\u0043';//Unicode中表示 c
2.4布爾型 boolean
只有兩個值:true和false,常常使用在循環和條件判斷當中。
3.基本數據類型之間的類型轉換
前提:這裏討論的是7種基本數據類型之間的運算,不包括boolean類型。
3.1自動類型提升
提升規則:
當容量小(表數範圍而不是字節大小)的數據類型的變量與容量大的數據類型的變量做運算的時候,結果自動提升爲容量大的數據類型。
byte /char/ short --> int --> long --> float --> double
特別地,當byte/char/short 三種變量做運算(包括同類型之間運算)時,結果爲int型。
byte b1=2;
int i1=129;
int i2=b1+i1;//相加提升到int
System.out.println();
float f1=b1+i1;
//******************************
char c1='a';
int i3=10;
int i4=c1+i3;
//******************************
short s2=10;
int i5=s2+c1;
//******************************
byte b2=10;
int i6=b2+c1;
//******************************
int i7=b1+b2;
3.2強制類型轉換
概念:自動提升運算的逆運算,即將容量大的數據類型轉換爲容量小的數據類型。
實現方法:使用強轉符號(),內部添加目標類型。
可能會導致精度損失。
double d1=12.9;
int i1=(int)d1;//12
//**************
long l1=123L;
int i2=(int) l1;
//**************
int i3=128;
byte b=(byte)i3;//-128
3.3兩種常見的編碼情況
- 可以不加L的long,不可以不加F的float
- long型變量位數小時,可以不加L,原因是默認int,自動提升爲long型;位數大,已經超出int範圍,必須加L;
- float型必須加F。
//不報錯,原因是默認int,自動提升爲long;
long l1=123;
//不加L會編譯失敗,已經超出int範圍
long l2=21323827747174712710990031L;
//編譯失敗,不加f默認double,需要強轉到float
//float f1=12.3
- 整型常量默認爲int,浮點型常量默認爲double
byte b1=12;
//報錯
//byte b2=b1+1;
//報錯
//float f1= b1+12.3;
4.String不是基本數據類型!!
4.1基本知識
- String屬於是引用數據類型;
- 聲明String類型變量,使用一對"";
- String可以和8種基本數據類型做運算,但是連接運算+,先運算的加數中有String類型則爲連接符號。運算結果爲String。
String s1="Hello World!";
String s2="a";
String s3="";
//char c1='';編譯不通過
char c2=' ';
//******************
int i=24;
String s1="科比的號碼:"
String info=s1+i;//連接運算
4.2測試
//*******測試1**********
char c='a';
int num=10;
String str="hello";
//*******計算一下的值**********
System.out.println(c+num+str);//107hello
System.out.println(c+str+num);//ahello10
System.out.println(c+(num+str));//a10hello
System.out.println((c+num)+str);//107hello
System.out.println(str+num+c);//hello10a
//*******測試2,判斷一下輸出結果**********
System.out.println("* *");//* *
System.out.println('*'+'\t'+'*');//93
System.out.println('*'+"\t"+'*');//* *
System.out.println('*'+'\t'+"*");//51*
System.out.println('*'+('\t'+"*"));//* *
//*******測試3,易錯題辨析,判斷對錯**********
String str1=4;//報錯
String str2 =3.5f+"";//
System.out.println(str2);//"3.5"
System.out.println(3+4+"Hello");//7Hello
System.out.println("Hello"+3+4);//Hello34
System.out.println('a'+1+"Hello"+3+4);//98Hello
System.out.println("Hello"+'a'+1);//Helloa1
//*******測試4,判斷能否通過編譯**********
//******1
short s=5;
s=s-2;//不能
//******2
byte b=3;
b=b+4;//no
b=(byte)(b+4)//yes
//******3
char c='a';
int i=5;
float d=.314F
double result = c+i+d;//yes
//******4
byte b=5;
short s=3;
short t=s+b;//no ,int
4.3 String和int轉換
1.int—>String
String str1=123+"";//”123“
2.String–>int
//使用基本數據類型包裝類的方法來實現
int num= Integer.parseInt(str1);//123