黑马程序员技术交流社区

标题: 有个小问题值得大家思考!来看下吧 [打印本页]

作者: 徐鑫    时间: 2012-4-26 22:23
标题: 有个小问题值得大家思考!来看下吧

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

作者: chenwei    时间: 2012-4-26 22:29
byte类型参与运算会自动提升为int型 ,在把int型赋给byte就会报错了
在byte、short、char参与运算的时候会自动提升为int,相当于将一个占空间较小的值放入了一个较大的空间。
作者: 小鹿叙鹿    时间: 2012-4-26 22:33
是这样的:
因为byte,short,char类型在进行运算的时候会首先自动提升为int型,然后在进行运算。
所以编译会报错,可以这样改
c=byte(a+b)强制转换为byte型
但是对于
byte c=3+4;
编译器就不会报错,因为3,与4都是常量,在进行运算的时候,Java虚拟机会首先对两个数相加,看长度是否超过byte的长度,
如果没有超出,就不会报错。否则,报错。
作者: 张成龙    时间: 2012-4-26 23:09
byte型数据在运算时提升为int型,int型赋给byte就会报错啦
作者: 马浩    时间: 2012-4-26 23:44
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);就不报错了
      
作者: HeiMaYSL    时间: 2012-4-27 17:02
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基础时,都说过的,建议你再去看看毕老师的教程。
      




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