黑马程序员技术交流社区

标题: 数据类型问题 [打印本页]

作者: 唐僧踏歌    时间: 2014-4-1 11:55
标题: 数据类型问题
本帖最后由 唐僧踏歌 于 2014-4-2 13:17 编辑

public class  A{

        public static void main(String[] args) {
                byte a=2,b=4,c;          //谁能解释下,为什么byte改成int就不会出错?
                 c=a*b;
                System.out.print("2乘4等于"+c);

        }

}
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
        Type mismatch: cannot convert from int to byte

可以a,b,c声明的都是byte类型的啊
作者: ehuashao    时间: 2014-4-1 12:12
在java中byte类型的数值在进行运算的时候,系统会自动转换为int类型,a,b,c为byte类型,而a*b却为int类型,
所以c=a*b,改为c=(byte)a*b,即可。
作者: 一诺千金    时间: 2014-4-1 12:13
变量在局部必须初始化,byte a=2,b=4,c=0;  
作者: 唐僧踏歌    时间: 2014-4-1 12:16
ehuashao 发表于 2014-4-1 12:12
在java中byte类型的数值在进行运算的时候,系统会自动转换为int类型,a,b,c为byte类型,而a*b却为int类型 ...

不知道为什么,这样好像也是不行。
作者: ehuashao    时间: 2014-4-1 12:21
唐僧踏歌 发表于 2014-4-1 12:16
不知道为什么,这样好像也是不行。

不好意思,刚上面写错了,是对a*b强转,不是对a强转,a*b的结果价格括号就好了。正确代码为c=(byte)(a*b);
作者: 唐僧踏歌    时间: 2014-4-1 12:25
ehuashao 发表于 2014-4-1 12:21
不好意思,刚上面写错了,是对a*b强转,不是对a强转,a*b的结果价格括号就好了。正确代码为c=(byte)(a*b) ...

嗯,是对的,谢谢

刚百度了下,下面的说法,应该是正确。

使用2目运算符的运算中,低于int型的都会转成int运算
高于int型的会转成最高的那个类型运算
使用3目运算符时,相对低级的数值会提升






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