Skip to content

Commit d6a5583

Browse files
author
hollis.zhl
committed
增加基本数据类型部分的知识点
1 parent b51f059 commit d6a5583

6 files changed

Lines changed: 65 additions & 3 deletions

File tree

README.md

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,11 +51,15 @@ Java的继承与实现
5151

5252
#### 基本数据类型
5353

54-
7种基本数据类型:整型、浮点型、布尔型、字符型
54+
[7种基本数据类型:整型、浮点型、布尔型、字符型](/basics/java-basic/basic-data-types.md)
5555

56-
整型中byte、short、int、long的取值范围
56+
[整型中byte、short、int、long的取值范围](/basics/java-basic/integer-scope.md)
5757

58-
什么是浮点型?什么是单精度和双精度?为什么不能用浮点型表示金额?
58+
[什么是浮点型?](/basics/java-basic/float.md)
59+
60+
[什么是单精度和双精度?](/basics/java-basic/single-double-float.md)
61+
62+
[为什么不能用浮点型表示金额?](float-amount.md)
5963

6064
#### 自动拆装箱
6165

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
Java中有8种基本数据类型
2+
分为三大类。
3+
4+
字符型:char
5+
6+
布尔型:boolean
7+
8+
数值型:
9+
1.整型:byte、short、int、long 2.浮点型:float、double
10+
11+
String不是基本数据类型,是引用类型。

basics/java-basic/float-amount.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
由于计算机中保存的小数其实是十进制的小数的近似值,并不是准确值,所以,千万不要在代码中使用浮点数来表示金额等重要的指标。
2+
3+
建议使用BigDecimal或者Long(单位为分)来表示金额。

basics/java-basic/float.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
在计算机科学中,浮点是一种对于实数的近似值数值表现法,由一个有效数字(即尾数)加上幂数来表示,通常是乘以某个基数的整数次指数得到。以这种表示法表示的数值,称为浮点数(floating-point number)。
2+
3+
计算机使用浮点数运算的主因,在于电脑使用二进位制的运算。例如:4÷2=2,4的二进制表示为100、2的二进制表示为010,在二进制中,相当于退一位数(100 -> 010)。
4+
5+
1的二进制是01,1.0/2=0.5,那么,0.5的二进制表示应该为(0.1),以此类推,0.25的二进制表示为0.01,所以,并不是说所有的十进制小数都能准确的用二进制表示出来,如0.1,因此只能使用近似值的方式表达。
6+
7+
也就是说,,十进制的小数在计算机中是由一个整数或定点数(即尾数)乘以某个基数(计算机中通常是2)的整数次幂得到的,这种表示方法类似于基数为10的科学计数法。
8+
9+
一个浮点数a由两个数m和e来表示:a = m × be。在任意一个这样的系统中,我们选择一个基数b(记数系统的基)和精度p(即使用多少位来存储)。m(即尾数)是形如±d.ddd...ddd的p位数(每一位是一个介于0到b-1之间的整数,包括0和b-1)。如果m的第一位是非0整数,m称作正规化的。有一些描述使用一个单独的符号位(s 代表+或者-)来表示正负,这样m必须是正的。e是指数。
10+
11+
位(bit)是衡量浮点数所需存储空间的单位,通常为32位或64位,分别被叫作单精度和双精度。

basics/java-basic/integer-scope.md

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
Java中的整型主要包含byte、short、int和long这四种,表示的数字范围也是从小到大的,之所以表示范围不同主要和他们存储数据时所占的字节数有关。
2+
3+
先来个简答的科普,1字节=8位(bit)。java中的整型属于有符号数。
4+
5+
先来看计算中8bit可以表示的数字:
6+
最小值:10000000 (-128)(-2^7)
7+
最大值:01111111(127)(2^7-1)
8+
具体计算方式参考:Java中,为什么byte类型的取值范围为-128~127? - CSDN博客
9+
10+
整型的这几个类型中,
11+
12+
  byte:byte用1个字节来存储,范围为-128(-2^7)到127(2^7-1),在变量初始化的时候,byte类型的默认值为0。
13+
14+
  short:short用2个字节存储,范围为-32,768 (-2^15)到32,767 (2^15-1),在变量初始化的时候,short类型的默认值为0,一般情况下,因为Java本身转型的原因,可以直接写为0。
15+
16+
  int:int用4个字节存储,范围为-2,147,483,648 (-2^31)到2,147,483,647 (2^31-1),在变量初始化的时候,int类型的默认值为0。
17+
18+
  long:long用8个字节存储,范围为-9,223,372,036,854,775,808 (-2^63)到9,223,372,036, 854,775,807 (2^63-1),在变量初始化的时候,long类型的默认值为0L或0l,也可直接写为0。
19+
20+
上面说过了,整型中,每个类型都有一定的表示范围,但是,在程序中有些计算会导致超出表示范围,即溢出。如以下代码:
21+
22+
int i = Integer.MAX_VALUE;
23+
int j = Integer.MAX_VALUE;
24+
25+
int k = i + j;
26+
System.out.println("i (" + i + ") + j (" + j + ") = k (" + k + ")");
27+
28+
输出结果:`i (2147483647) + j (2147483647) = k (-2)`
29+
30+
这就是发生了溢出,溢出的时候并不会抛异常,也没有任何提示。所以,在程序中,使用同类型的数据进行运算的时候,一定要注意数据溢出的问题。
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
单精度浮点数在计算机存储器中占用4个字节(32 bits),利用“浮点”(浮动小数点)的方法,可以表示一个范围很大的数值。
2+
3+
比起单精度浮点数,双精度浮点数(double)使用 64 位(8字节) 来存储一个浮点数。

0 commit comments

Comments
 (0)