A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 三生石 中级黑马   /  2014-3-7 22:30  /  1829 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 三生石 于 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}

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

1 个回复

倒序浏览
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

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马