黑马程序员技术交流社区

标题: 在java基础中看到的求解 [打印本页]

作者: qq563426478    时间: 2015-3-19 21:32
标题: 在java基础中看到的求解
这是在网上练习题中看到的    就是不能理解呀  纠结呀  求解
long b = 88888888888为什么编译就不能通过呢?   

System.out.println(a)System.out.println(‘a+1) 的区别。        输出字符a                               输出98这个为什么输出98呢
        byte b1=3,b2=4,b;b=b1+b2;为什么这个编译就不能通过呢?b=3+4; 怎么int就转换成byte了?




作者: 浅步调    时间: 2015-3-20 00:26
long b = 88888888888:long的取值范围为   -2147483648~2147483647因此这里的b会出现越界报错,而运行不出来
System.out.println(‘a’) 意思是输出字符a
System.out.println(‘a’+1)‘a’+1 此时内存里面运算的是字符a的ASCII值+1,在ASCII码表中a对应的值为97,因此输出值为98
byte b1=3,b2=4,b;b=b1+b2;  Java中表达式中char、byte、short类型计算时会自动先转换成int型,即两个byte型相加生成的是int型变量。在这里要将b1和b2的和赋值给b,必须写成b= (byte)(b1 + b2);因为b1+b2是int型的,不强制转换类型编译器会报错。
b=3+4; 怎么int就转换成byte了?常量相加会被编译器优化而变量不会,因为byte类型的取值范围是-128~127,如果b1,b2被赋值为127那么byte类型的b就会越界,所以要转型为int,而常量不会。
作者: Dark县令    时间: 2015-3-20 00:27
楼上正解!
作者: 胡谭龙    时间: 2015-3-20 07:58
浅步调 发表于 2015-3-20 00:26
long b = 88888888888:long的取值范围为   -2147483648~2147483647因此这里的b会出现越界报错,而运行不 ...

说的极是




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