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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© qq563426478 中级黑马   /  2015-3-19 21:32  /  1260 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

这是在网上练习题中看到的    就是不能理解呀  纠结呀  求解
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了?



3 个回复

倒序浏览
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,而常量不会。
回复 使用道具 举报 1 0
楼上正解!
回复 使用道具 举报
浅步调 发表于 2015-3-20 00:26
long b = 88888888888:long的取值范围为   -2147483648~2147483647因此这里的b会出现越界报错,而运行不 ...

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