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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 我为你着迷 金牌黑马   /  2014-10-17 14:55  /  1629 人查看  /  15 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

byte b1=3,b2=4,b;
b=b1+b2;
b=3+4;
哪句是编译失败的呢?为什么呢?

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

15 个回复

倒序浏览
第三句咯。int 类型不能赋值给已经声明为byte类型的b。
回复 使用道具 举报 0 1
哈达洋 发表于 2014-10-17 15:08
第三句咯。int 类型不能赋值给已经声明为byte类型的b。

b=3+4 ,3和4都是常量,所以java在编译时期会检查该常量的和是否超出byte类型的范围。如果没有可以赋值。
b=b1+b2不可以,是因为b1和b2是变量,因为变量的值会变化,不确定具体的值,所以默认使用int类型进行存储。
回复 使用道具 举报
我为你着迷 发表于 2014-10-17 15:29
b=3+4 ,3和4都是常量,所以java在编译时期会检查该常量的和是否超出byte类型的范围。如果没有可以赋值。 ...

真的是,多谢!!!
回复 使用道具 举报
我为你着迷 发表于 2014-10-17 15:29
b=3+4 ,3和4都是常量,所以java在编译时期会检查该常量的和是否超出byte类型的范围。如果没有可以赋值。 ...

感谢,一个细节问题
回复 使用道具 举报
细节的问题,我居然也做错了
回复 使用道具 举报
我为你着迷 发表于 2014-10-17 15:29
b=3+4 ,3和4都是常量,所以java在编译时期会检查该常量的和是否超出byte类型的范围。如果没有可以赋值。 ...

受教了。。。
回复 使用道具 举报
第二句,因为java内部有一个叫自动类型转换的东西
回复 使用道具 举报
liu951753xz 发表于 2014-10-17 23:42
第二句,因为java内部有一个叫自动类型转换的东西

亲 什么意思 啊   
回复 使用道具 举报
b=b1+b2;这一行出错,因为Java中,有自动类型转换,由JVM自动完成,比如两个byte类型运算时自动转成int,这样再赋值给byte类型的b是不行的
回复 使用道具 举报
csf62615 来自手机 中级黑马 2014-10-18 11:31:42
11#
涉及到类型转换
回复 使用道具 举报
月老~牵红线 发表于 2014-10-18 10:54
b=b1+b2;这一行出错,因为Java中,有自动类型转换,由JVM自动完成,比如两个byte类型运算时自动转成int,这 ...

奥 谢谢啊  
回复 使用道具 举报
int类型是个基准,所有低于int类型的只要进行算术运算都要提升为int型,
b=3+4,在编译时已经得出结果了,即等同于b=7;并不会在最终的运行字节码中存在3+4这条指令
回复 使用道具 举报
b=b1+b2;这一行,你需要做强制转换类型
这么写,b=(byte)(b1+b2);运算完后,转成byte型即可。。。
  1. class  Test
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                
  6.                 byte b1=3,b2=4,b;
  7.                 b=(byte)(b1+b2);
  8.                 b=3+4;
  9.                
  10.                 System.out.println(b);
  11.         }
  12. }
复制代码
回复 使用道具 举报
nerveva2000 发表于 2014-10-18 14:51
b=b1+b2;这一行,你需要做强制转换类型
这么写,b=(byte)(b1+b2);运算完后,转成byte型即可。。。
...

嗯 谢谢啊   辛苦了  
回复 使用道具 举报
b = (byte) (3 + 4);
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马