参考:https://www.jianshu.com/p/2f663dc820d0
http://m.imooc.com/wenda/detail/352257
https://www.jianshu.com/p/2f663dc820d0
| 基本类型 | 大小(字节) |
| byte | 1 |
| short | 2 |
| int | 4 |
| float | 4 |
| long | 8 |
| double | 8 |
| char | 2 |
| boolean | -不定 |
等比数列:a1+a1*q+a1*q*q+....a1*q^(n-1)次方=a1*(1-q^n)/(1-q)。
Int最大值和最小值求解:
int类型是8个字节,32位,最大值用二进制表示就是, 0111...(总共31个1)。为什么第一位是0? 二进制里,最高位(第一位)表示符号0表示正,1表示负。所以将二进制01111...(31个1)转换成十进制,就是:2^0*1 + 2^1*1 + 2^2*1...+2^n*1就变成了2的n次方求和, 这里的n就是30,因为第一位是0,即2^31 * 02的n次方求和(n=30),由等比数列可知, 2^0 + 2^1 + 2^2...+2^n=2^(n+1)-1 = 2^31-1同理最小值的二进制表示就是,1000...(总共31个0),(负数二进制转十进制,是用补码(反码加1)转的。)1000(31个0)的补码还是本身。 所以最小值就是, 2^0*0 + 2^1*0 + 2^2*0...+ 2^31*1=2^31= -2^31
boolean说明:
1、1个bit
理由是boolean类型的值只有true和false两种逻辑值,在编译后会使用1和0来表示,这两个数在内存中只需要1位(bit)即可存储,位是计算机最小的存储单位。
2、1个字节
理由是虽然编译后1和0只需占用1位空间,但计算机处理数据的最小单位是1个字节,1个字节等于8位,实际存储的空间是:用1个字节的最低位存储,其他7位用0填补,如果值是true的话则存储的二进制为:0000 0001,如果是false的话则存储的二进制为:0000 0000。
3、4个字节
理由来源是《Java虚拟机规范》一书中的描述:“虽然定义了boolean这种数据类型,但是只对它提供了非常有限的支持。在Java虚拟机中没有任何供boolean值专用的字节码指令,Java语言表达式所操作的boolean值,在编译之后都使用Java虚拟机中的int数据类型来代替,而boolean数组将会被编码成Java虚拟机的byte数组,每个元素boolean元素占8位”。这样我们可以得出boolean类型占了单独使用是4个字节,在数组中又是1个字节。
/**
* A constant holding the minimum value an {@code int} can
* have, -2<sup>31</sup>.
*/
@Native public static final int MIN_VALUE = 0x80000000;
/**
* A constant holding the maximum value an {@code int} can
* have, 2<sup>31</sup>-1.
*/
@Native public static final int MAX_VALUE = 0x7fffffff;
1880

被折叠的 条评论
为什么被折叠?



