@@ -386,16 +386,18 @@ Java 中有 8 种基本数据类型,分别为:
386386
387387这 8 种基本数据类型的默认值以及所占空间的大小如下:
388388
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,就会导致溢出,变成一个负数。
399401
400402对于 ` boolean ` ,官方文档未明确定义,它依赖于 JVM 厂商的具体实现。逻辑上理解是占用 1 位,但是实际中会考虑计算机高效存储因素。
401403
@@ -507,7 +509,7 @@ Integer i2 = new Integer(40);
507509System . out. println(i1== i2);
508510```
509511
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) ` 会直接创建新的对象。
511513
512514因此,答案是 ` false ` 。你答对了吗?
513515
0 commit comments