「Java 專欄」06-Java 中的基本數(shù)據(jù)類型
你好,我是悅創(chuàng)。
原文首發(fā):https://bornforthis.cn
1. 目錄
認識二進制 數(shù)字的基本數(shù)據(jù)類型 布爾和字符數(shù)據(jù)類型 使用各種基本數(shù)據(jù)類型
public class BigNumber {
public static void main(String[] args) {
int bigNum = 9999999999; // 會報錯:java: 整數(shù)太大
long number = 9999999999L; // 解決方法
}
}
從上面的代碼,我們引出了幾個問題:
long 是個什么東西? L 又是什么東西?
這就是你要學(xué)習(xí)本屆內(nèi)容的原因!
2. 認識二進制
2.1 十進制
每一位可以是 0~9這 10 個值,到 10 進位。一百用十進制表示就是 100,十就是 10。
2.2 二進制
每一位可以是 0 和 1 這兩個值,到 2 進位。一百用二進制表示就是 1100100,十就是 1010。
2.3 十六進制
每一位可以是 0~F 這15個值,到 16 進位。一百用十六進制表示就是 64,十就是 A。
2.3 bit 和 byte
Bit 意為“位”或“比特”,是計算機運算的基礎(chǔ),屬于二進制的范疇; Byte 意為“字節(jié)”,是計算機文件大小的基本計算單位;「換算」1 Byte = 8 Bits【1B=8b】 1 KB = 1024 Bytes 1 MB = 1024 KB 1 GB = 1024 MB
一個二進制的位叫做一個 bit。俗稱小 b。寬帶中的單位,都是小 b 八個二進制的位,組成一個 byte,俗稱大 B。硬盤等存儲的單位,都是大 B Byte 是計算機中基本的衡量存儲的單位,計算機在對外使用時不會用小 b(bit) 作為劃分存儲的單位。
3. 數(shù)字的基本數(shù)據(jù)類型
3.1 整數(shù)類型
byte 占用 1 個 byte,值域是 -128~127short 占用 2 個 byte,值域是 -32768~32767int 占用 4 個 byte,值域是 -2147483648~2147483647。Java 中整數(shù)缺省是 int 類型【缺省:默認情況下,沒有特殊指明類型下,Java 認為是 int】 【缺省,即系統(tǒng)默認狀態(tài),意思與“默認”相同。】 【“缺省”最初來源于計算機英文文檔中的單詞"default","default”有很多意思:違約、缺省、拖欠、默認,由于當(dāng)時計算機方面的翻譯水平不高,于是就把這個詞直譯成了“缺省”,其實應(yīng)該取它的引申意思“默認”。后來的人們發(fā)現(xiàn),無論怎么解釋,缺省好像都說不通,但是由于之前的人們已經(jīng)習(xí)慣了“缺省”這個用法,故依舊延續(xù)了這個用法。后來的新一輩的人們覺得說起來很拗口,就使用了"default”的引申意思,所以現(xiàn)在在大多數(shù)計算機技術(shù)文檔或者軟件里面,采用的都是意譯之后的“默認”這個用法。】 long 占用 8 個 byte,值域是 -9223372036854774808~9223372036854774807
3.2 浮點(小數(shù))類型
float 占用 4 個 byte ,有精度,值域復(fù)雜 ±340282346638528859811704183484516925440double 精度是 float 的兩倍,占用 8 個 byte。Java 中浮點數(shù)缺省是 double 類型。
public class FloatCalc {
public static void main(String[] args) {
System.out.println(1 / 3.0);
// 實際來說是無限循環(huán)小數(shù),但是對 Java 來說能力有限只能顯示/計算范圍內(nèi)的結(jié)果
// 也可以說,計算機沒有能力把這個無限循環(huán)表達出來。在它可能的存儲空間里,只能保存到 0.3333333333333333
}
}
3.3 符號位
用 byte 來舉例子,一個 1 byte = 8 bit;2【二進制】 的 8 次方是 256,而有一個是符號位,所以最后是:128,也就是上面給出的范圍。 參考:https://bornforthis.cn/posts/14.html
4. 布爾和字符數(shù)據(jù)類型
4.1 布爾和字符數(shù)據(jù)類型
boolean 占用 4 個 byte,值域是 true,false。 char 占用 2 個 byte,值域是所有字符(最多 65535 個)
public class BooleanAndChar {
public static void main(String[] args) {
System.out.println(1 < 2); // true
System.out.println(1 > 2); // false
System.out.println("ABC");
System.out.println('A'); // 只能有一個字符
}
}
5. 使用各種基本數(shù)據(jù)類型
例程 L 后綴 感受浮點數(shù)精度 整數(shù)缺省是 int 類型,浮點數(shù)缺省是 double 類型 編譯錯誤的定位和修正
6. 代碼實操
public class PrimaryTypes {
public static void main(String[] args) {
byte byteVar = 99;
// byte byteVar = 128; // 超出 byte 范圍
System.out.println(byteVar);
short shorVar = -30000;
System.out.println(shorVar);
int intVar = 300000;
System.out.println(intVar);
long longVar = 99;
// long bingLongVar = 9999999999; // 缺省是 int,需要在末尾添加 L
long bingLongVar = 9999999999L; // 缺省是 int,需要在末尾添加 L
// long bingLongVar = 9999999999l; // 不推薦小 l,比如:11111111l,你能發(fā)現(xiàn)哪個是 1 哪個是 l 么?
System.out.println(bingLongVar);
float floatVar = 100.1f; // 缺省是 double 需要在后面添加 f/F
// float floatVar = 100.1; // 缺省是 double 需要在后面添加 f/F
System.out.println(floatVar);
/*
* 解析:缺省是 double,也就是說浮點數(shù)會被自動識別為 double;
* 但是你前面的變量被聲明為 float 這樣就和系統(tǒng)相沖突啦,就需要標(biāo)明數(shù)字類型*/
double doubleVar = 100.1;
System.out.println(doubleVar);
boolean condition = true;
boolean fcondition = false;
System.out.println(condition);
char ch = 'A';
System.out.println(ch);
float floatVar1 = 100.1111111111f;
System.out.println("floatVar1:>>>" + floatVar1);
double dobleVar1 = 100.1111111111;
System.out.println("dobleVar1:>>>" + dobleVar1);
}
}
"C:\Program Files\Java\jdk-11.0.2\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2022.1.2\lib\idea_rt.jar=49882:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2022.1.2\bin" -Dfile.encoding=UTF-8 -classpath D:\Java_Coder\Coder06\out\production\Coder06 PrimaryTypes
99
-30000
300000
9999999999
100.1
100.1
true
A
floatVar1:>>>100.111115
dobleVar1:>>>100.1111111111
Process finished with exit code 0
import java.math.BigDecimal;
public class PrimaryTypes {
public static void main(String[] args) {
byte byteVar = 100;
System.out.println(byteVar);
short shortVar = 30000;
System.out.println(shortVar);
int intVar = 1000000000;
System.out.println(intVar);
long longVar = 80000000000L;
System.out.println(longVar);
float floatVar = 100.0000000666F;
System.out.println(floatVar);
double doubleVar = 100.0000000666;
System.out.println(doubleVar);
boolean booleanVar = true;
System.out.println(booleanVar);
char charVar = 'a';
System.out.println(charVar);
}
}
7. 技巧
評論
圖片
表情
