黑马程序员技术交流社区

标题: Java中Integer的最大值和最小值 [打印本页]

作者: 三生石    时间: 2014-3-7 22:30
标题: Java中Integer的最大值和最小值
本帖最后由 三生石 于 2014-3-7 22:31 编辑

从JDK1.0开始,Integer中就定义了MIN_VALUE和MAX-VALUE两个常量:
public static final int   MIN_VALUE = 0x80000000;public static final int   MAX_VALUE = 0x7fffffff;
Q1:谁能给解释一下,这两个常量为什么会分别定义成0x80000000和0x7fffffff。
Q2:java.lang.String的最大长度是多少?
Q3:如下代码能抛出异常吗?为什么
int x = Integer.MAX_VALUE+10;
if(x >= Integer.MAX_VALUE || x <= Integer.MIN_VALUE)
{ //throw exception}


作者: twtzhongxin    时间: 2014-3-8 01:16
1.java中int是四个字节,32位的,取值范围为(-2^32,2^32-1),计算机中,数值一律用补码表示,这两个数的补码就是1000 0000 0000 0000 0000 0000 0000 0000与0111 1111 1111 1111 1111 1111 1111 1111,变成16进制就是0x80000000与0x7fffffff。
2.String str=new String("……")这种形式定义的字符串,类String中是使用count 来记录对象字符的数量,而count 的类型为 int,因此,我们可以推测最长的长度为 2^32,也就是4G。
String str="……"这种形式定义的字符串,那么双引号里面的ASCII 字符最多只能有 65534 个。为什么呢?因为
文件的规范中, CONSTANT_Utf8_info 表中使用一个16 位的无符号整数来记录字符串的长度的,最多能表示 65536 个字节,而java class 文件是使用一种变体UTF-8格式来存放字符的,null 值使用两个字节来表示,因此只剩下 65536- 2 = 65534个字节。也正是变体UTF-8 的原因,如果字符串中含有中文等非ASCII 字符,那么
双引号中字符的数量会更少(一个中文字符占用三个字节)。如果超出这个数量,在编译的时候编译器会报错。
3.不能。Integer.MAX_VALUE+10可以表示为:
0x80000000+0x0000000a
  1000 0000 0000 0000 0000 0000 0000 0000+
  0000 0000 0000 0000 0000 0000 0000 1010
=1000 0000 0000 0000 0000 0000 0000 1001 这个补码对应的整数是-2147483639




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2