@@ -386,16 +386,18 @@ Java 中有 8 种基本数据类型,分别为:
386
386
387
387
这 8 种基本数据类型的默认值以及所占空间的大小如下:
388
388
389
- | 基本类型 | 位数 | 字节 | 默认值 | 取值范围 |
390
- | :-------- | :--- | :--- | :------ | ------------------------------------------ |
391
- | ` byte ` | 8 | 1 | 0 | -128 ~ 127 |
392
- | ` short ` | 16 | 2 | 0 | -32768 ~ 32767 |
393
- | ` int ` | 32 | 4 | 0 | -2147483648 ~ 2147483647 |
394
- | ` long ` | 64 | 8 | 0L | -9223372036854775808 ~ 9223372036854775807 |
395
- | ` char ` | 16 | 2 | 'u0000' | 0 ~ 65535 |
396
- | ` float ` | 32 | 4 | 0f | 1.4E-45 ~ 3.4028235E38 |
397
- | ` double ` | 64 | 8 | 0d | 4.9E-324 ~ 1.7976931348623157E308 |
398
- | ` boolean ` | 1 | | false | true、false |
389
+ | 基本类型 | 位数 | 字节 | 默认值 | 取值范围 |
390
+ | :-------- | :--- | :--- | :------ | ------------------------------------------------------------ |
391
+ | ` byte ` | 8 | 1 | 0 | -128 ~ 127 |
392
+ | ` short ` | 16 | 2 | 0 | -32768(-2^15) ~ 32767(2^15 - 1) |
393
+ | ` int ` | 32 | 4 | 0 | -2147483648 ~ 2147483647 |
394
+ | ` long ` | 64 | 8 | 0L | -9223372036854775808(-2^63) ~ 9223372036854775807(2^63 -1) |
395
+ | ` char ` | 16 | 2 | 'u0000' | 0 ~ 65535(2^16 - 1) |
396
+ | ` float ` | 32 | 4 | 0f | 1.4E-45 ~ 3.4028235E38 |
397
+ | ` double ` | 64 | 8 | 0d | 4.9E-324 ~ 1.7976931348623157E308 |
398
+ | ` boolean ` | 1 | | false | true、false |
399
+
400
+ 可以看到,像 ` byte ` 、` short ` 、` int ` 、` long ` 能表示的最大正数都减 1 了。这是为什么呢?这是因为在二进制补码表示法中,最高位是用来表示符号的(0 表示正数,1 表示负数),其余位表示数值部分。所以,如果我们要表示最大的正数,我们需要把除了最高位之外的所有位都设为 1。如果我们再加 1,就会导致溢出,变成一个负数。
399
401
400
402
对于 ` boolean ` ,官方文档未明确定义,它依赖于 JVM 厂商的具体实现。逻辑上理解是占用 1 位,但是实际中会考虑计算机高效存储因素。
401
403
@@ -507,7 +509,7 @@ Integer i2 = new Integer(40);
507
509
System . out. println(i1== i2);
508
510
```
509
511
510
- ` Integer i1=40 ` 这一行代码会发生装箱 ,也就是说这行代码等价于 ` Integer i1=Integer.valueOf(40) ` 。因此,` i1 ` 直接使用的是缓存中的对象。而` Integer i2 = new Integer(40) ` 会直接创建新的对象。
512
+ ` Integer i1=40 ` 这一行代码会发生拆箱 ,也就是说这行代码等价于 ` Integer i1=Integer.valueOf(40) ` 。因此,` i1 ` 直接使用的是缓存中的对象。而` Integer i2 = new Integer(40) ` 会直接创建新的对象。
511
513
512
514
因此,答案是 ` false ` 。你答对了吗?
513
515
0 commit comments