識別符號與資料型別——有C++基礎的Java入門(二)
一、 識別符號
1、 概念
Java語言中,對於變數,常量,函式,語句塊也有名字,我們統統稱之為Java識別符號。
識別符號是用來給類、物件、方法、變數、介面和自定義資料型別命名的。
2、 識別符號的規範
使用26個字母的大小寫或數字還有“_”,“$”,數字和C++一樣不能寫在開頭,但在Java中是區分大小寫的(如HelloWorld和helloworld)。
(1) 類和介面
首字元大寫,如果是多個單詞,則每一個單詞的首字元都要大寫(如HelloWorld)。
(2) 變數和方法
第一個單詞的首字元小寫後續的單詞首字元大寫(和JS的函式命名規則一樣,如helloWorld,俗稱駝峰模式)。
(3) 常量
多個單詞定義常量的時候每個單詞都大寫,單詞之間使用“_”隔開(如HELLO_WORLD)。
二、 資料型別
1、 資料型別定義及預設值
序號 |
資料型別 |
大小/位 |
封裝類 |
預設值 |
可表示資料範圍 |
1 |
byte(位) |
8 |
Byte |
0 |
-128~127 |
2 |
short(短整數) |
16 |
Short |
0 |
-32768~32767 |
3 |
int(整數) |
32 |
Integer |
0 |
-2147483648~2147483647 |
4 |
long(長整數) |
64 |
Long |
0 |
-9223372036854775808~9223372036854775807 |
5 |
float(單精度) |
32 |
Float |
0.0 |
1.4E-45~3.4028235E38 |
6 |
double(雙精度) |
64 |
Double |
0.0 |
4.9E-324~1.7976931348623157E308 |
7 |
char(字元) |
16 |
Character |
空 |
0~65535 |
8 |
boolean |
8 |
Boolean |
flase |
true或false |
2、資料型別自動轉換
(1) 總結
1、 int 一旦達到最大值會損失精度。
2、 任何整數型別和long型別做運算都會轉換成long型別。
3、 常量再做運算的時候只要不超出定義的資料型別的範圍(範圍如上表)就不會報錯。
4、 float型別和所有整數型別計算都會轉換成float。
5、float型別和常量計算時不會有型別提升。
6、 double型別和float型別計算會轉換為double型別;
規律:小空間的資料型別和大空間的資料型別的數計算會向大空間的資料型別去轉換。
(2) 與C++的不同點
float型別和c++有所不同,如java定義float a=1; 與float a = 1f; 的區別?
float a =1 在這裡是整型,當賦值給一個float的時候,存在一個隱式轉換,但不損失精度。
float a=1f 在這裡就是float型別。
如果定義成float=1.0;就肯定會報錯,因為1.0是double型別的。double範圍比float大,為了不損失精度,不會自動轉換。這時就必須寫成float a=1.0f;
(3) 原理
變數在做計算的時候可能存在溢位的情況,Java就採用自動型別轉換來解決這個問題。
給大家舉個栗子吧~ byte、short、char在計算的時候會自動的提升資料型別到int(int和其它數值計算也會溢位,int不會自動提升型別而是直接損失精度)。
在二進位制裡面,一個int是4個位元組,最大的值是 0111 1111 1111 1111 1111 1111 1111 1111,此時如果在最低位上加1,則數值為1000 0000 0000 0000 0000 0000 ,二進位制的最高位是符號位,則此時該數變成了一個負數,這個負數是多少呢?
3、 強制轉換
大空間的型別向小空間的型別去轉換。
int型別的8 | 0000000 0000000 0000000 0001000 |
short型別的8 | 0000000 0001000 |
byte型別的8 | 0001000 |
強制轉換的語法和c++一樣:(目標資料型別)變數名。
int i=10;
byte b = (byte)i;
注意:
① 小數轉換整數會捨棄小數位(非四捨五入)。
② 如果把整型強制轉換成byte有可能會損失精度。原因:轉換變數的值可能會超過目標型別的最大範圍。