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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 徐鑫 中级黑马   /  2012-4-26 22:23  /  2014 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


public class sdfsdf {
        public static void main(String[] args) {
                byte a = 1;
                byte b = 2;
                byte c;
                c = a+b;//这里编译错误,为什么
        }
}

5 个回复

倒序浏览
byte类型参与运算会自动提升为int型 ,在把int型赋给byte就会报错了
在byte、short、char参与运算的时候会自动提升为int,相当于将一个占空间较小的值放入了一个较大的空间。
回复 使用道具 举报
是这样的:
因为byte,short,char类型在进行运算的时候会首先自动提升为int型,然后在进行运算。
所以编译会报错,可以这样改
c=byte(a+b)强制转换为byte型
但是对于
byte c=3+4;
编译器就不会报错,因为3,与4都是常量,在进行运算的时候,Java虚拟机会首先对两个数相加,看长度是否超过byte的长度,
如果没有超出,就不会报错。否则,报错。
回复 使用道具 举报
byte型数据在运算时提升为int型,int型赋给byte就会报错啦
回复 使用道具 举报
public class sdfsdf {
        public static void main(String[] args) {
                byte a = 1;
                byte b = 2;
                byte c;
                c = a+b;//做加法运算时,a和b会被提升为int型,可以改成c=(byte)(a+b);就不报错了
      
回复 使用道具 举报
public class sdfsdf {
         public static void main(String[] args) {
                 byte a = 1;
                 byte b = 2;
                 byte c;
                 c = a+b;   //在这里在编译时,java虚拟机会提示你:可能损失精度,找到:int,需要:byte。
       这种编译错误是因为:java虚拟机在编译byte,short,char类型进行运算时,会先把它们自动提升为 int 类型,然后在进行其它的运算。
解决这类问题就是加上强制类型转换一下就哦了。     
       可以把c=a+b 改成 c=(byte)(a+b); 这样就不会损失精度了。
  这些东西毕老师在讲java基础时,都说过的,建议你再去看看毕老师的教程。
      
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马