1. 程式人生 > 實用技巧 >基本型別

基本型別

java的8大基本型別:https://www.runoob.com/java/java-basic-datatypes.html
byte((位元組型)):8位,最大儲存資料量是255,存放的資料範圍是-128~127之間。
short(短整型):16位,最大資料儲存量是65536,資料範圍是-32768~32767之間。
int(整型):32位,最大資料儲存容量是2的32次方減1,資料範圍是負的2的31次方到正的2的31次方減1。
long(長整型):64位,最大資料儲存容量是2的64次方減1,資料範圍為負的2的63次方到正的2的63次方減1。
float(單精度浮點型):32位,資料範圍在3.4e-45~1.4e38,直接賦值時必須在數字後加上f或F。有效數位是 7 位

例如:float a=1.3; 會編譯報錯,正確的寫法 float a = (float)1.3;或者float a = 1.3f;(f或F都可以不區分大小寫)
double(雙精度浮點型):64位,資料範圍在4.9e-324~1.8e308,賦值時可以加d或D也可以不加。有效數字16位,如果不宣告,預設小數為double型別
boolean(布林型):只有true和false兩個取值。
char(字元型):
字元,字符集 和字元編碼:https://baike.baidu.com/item/Java%E5%AD%97%E7%AC%A6/4914060?fr=aladdin
1.用英文單引號括起來的單個字元,例如:'a'、'字'。這是最常見的宣告字元形式。
2. 用英文單引號括起來的十六進位制字元程式碼值來表示單個字元。其格式為:'uXXXX',其中u是約定的字首(u是unicode的第一個字母),而後面的XXXX位4位十六進位制數,是該字元在unicode字符集中的序號。例如:'uFFFF'。
char:16位,char本質上是一個固定佔用兩個位元組的無符號正整數,這個正整數對應於Unicode編號,用於表示那個Unicode編號對應的字元。由於固定佔用兩個位元組,char只能表示Unicode編號在65 536以內的字元,而不能表示超出範圍的字元。
最小值是 \u0000(即為0);
最大值是 \uffff(即為65,535)
char比較特殊:
char型別賦值
char a = 'a'; //任意單個字元,加單引號。
char a = '中';//任意單箇中文字,加單引號。
char a = 111;//整數。如果不帶引號,可以等於整數,範圍是0~65535。十進位制、八進位制、十六進位制均可。這時候的整數表示的是unicode的編碼,輸出的是該編號對應的iuicode字元,輸出字元編碼表中對應的字元,例如:char r = 65,sout(r)輸出的是A,因為A在unicode中的十進位制unicode編號就是65

PS:如果輸入字元(如 char a = ' 6'),那麼輸出的就是他代表的值6;但是char a = ' 65'是會報錯的哦,因為65有2個字元了,分別是6和5,會報錯超出字元限制了。也就是想直接表達數字的,只有有一個數字 char a = ' 6'

如果輸入的是數字(如 char a = 65),則會輸出對應的字元 A,因為A在unicode中的十進位制編碼就是65,其他進位制的也行因為最終都會轉為二進位制,unicode喜歡用16進製表示,

比如:
char r = 65;
System.out.println(r);
那麼輸出的是A,因為A在unicode中對應的編碼就是65,所以表示為整型時,輸出的就是編碼對應的字元
而漢字和字母就還是漢字
int n1 = 'A'; // 字母“A”的Unicodde編碼是65
int n2 = '中'; // 漢字“中”的Unicode編碼是20013

當你使用一個整型去定義一個char型,實際指的是他代表的字元,而你用一個字元去定義一個char型,也可以得到他所代表的值。
比如:
char ch1 = 49;
char ch2 = '1';
System.out.println(ch2);
此時輸出的還是1。
這兩個是等價的
ch1 == ch2
(int)ch1 == (int)ch2


還可以直接用轉義字元\u+Unicode編碼來表示一個字元:
// 注意是十六進位制:
char c3 = '\u0041'; // 'A',因為十六進位制0041 = 十進位制65
char c4 = '\u4e2d'; // '中',因為十六進位制4e2d = 十進位制20013

二進位制轉為十進位制計算

從二進位制數的最右數起,最右方的第一個數乘以2的0次方,第二個數乘以2的1次方……依次類推,把各結果累計相加就是轉換後的十進位制數。

例如:00100000

左側數1的右側還有5位,那麼就是1*2的五次方=64,因為其他數字是0,乘了也是0,我就省略了

01000001

左側第二個1右側還有6位數,最後一個1右側還有0個數

1*2六次方+1*2的零次方=65

編碼unicode utf-8編碼詳解

編碼的好文章:

https://blog.csdn.net/Deft_MKJing/article/details/79460485

https://blog.csdn.net/qq_22771739/article/details/84261165

在Java中做一個總結:

在我們編譯器把java原始檔編譯成.class檔案的時候需要用到檔案的編碼,我們一般設定成UTF-8,如果檔案是其他編碼就有可能出現錯誤,之前的一片博文裡面就有提到字元編碼集導致的錯誤。但一旦編譯成.class檔案開始,就不用在乎關於我們程式原始碼的什麼UTF-8編碼了,因為已經完成了從UTF-8編碼的檔案轉成與平臺無關的.class檔案了,也就是說已經把根據UTF-8編碼方式轉成了Unicode。

引用下別人部落格中的內容:

在Java(其中主要包括在JVM中、記憶體中、在程式碼裡宣告的每一個char、String型別的變數中。)中字元只以一種形式存在,那就是Unicode,不選擇任何特定的編碼,直接使用它們在字符集中的編號,這是統一的唯一的方法。

在JVM內部,統一使用Unicode表示,當著字元從JVM內部移動到外部時(即儲存為檔案系統中的一個檔案內容時),就進行了編碼轉換,使用了具體的編碼方案。因此也可以說,所有的編碼轉換隻發生在邊界的地方,也就是各種輸入/輸出流的起作用的地方。

2.UTF-8編碼方式

注意:UTF-8編碼方式是一種檔案的儲存方式,只發生在邊界的地方,也就是各種輸入/輸出流的起作用的地方。

貼上一篇別人的博文:

我們知道,計算機內部,所有資訊最終都是一個二進位制值。每一個二進位制位(bit)有0和1兩種狀態,因此八個二進位制位就可以組合出256種狀態,這被稱為一個位元組(byte)。也就是說,一個位元組一共可以用來表示256種不同的狀態,每一個狀態對應一個符號,就是256個符號,從00000000到11111111。

上個世紀60年代,美國製定了一套字元編碼,對英語字元與二進位制位之間的關係,做了統一規定。這被稱為 ASCII 碼,一直沿用至今。

ASCII 碼一共規定了128個字元的編碼,比如空格SPACE是32(二進位制00100000),大寫的字母A是65(二進位制01000001)。這128個符號(包括32個不能打印出來的控制符號),只佔用了一個位元組的後面7位,最前面的一位統一規定為0。