黑马程序员技术交流社区
标题: 在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
说的极是
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |