黑马程序员技术交流社区

标题: 类型转换的问题? [打印本页]

作者: 黑马李文    时间: 2013-7-30 22:53
标题: 类型转换的问题?
本帖最后由 黑马李文 于 2013-7-30 23:32 编辑

        byte b = 4;
        byte b2 = 5;
        byte b3 = b + b2;  编译不能通过,什么原因呢?
        byte b4 = 4  + 5 ;  编译通过
作者: 黑马李昂    时间: 2013-7-30 23:02
byte b3 = b + b2;//不能通过的原因是 byte类型的b和b2是变量,所以java虚拟机会考虑b和b2相加的结果会超出-128~127的范围,所以会报错。
                //解决方法 byte b3 = (byte)(b+b2);
希望与楼主互相探讨{:soso_e100:}


作者: 肖博文    时间: 2013-7-30 23:05

public class Demo{

public static boolean demo(){
   
        
       //编译通过。
        byte b = 4;
        
        //编译通过。
        byte b2 = 5;
        
        /*
         * 编译失败。
         *   在java中,变量是不确定的,编译时期编译器是并知道b和b2的值的(编译只是检查语法问题,赋值是在运行时发生的)。
         * 所以会将b、b2所有可能值都进行判断。因此b+b2即使有可能超出范围,都不会通过编译,除非进行强制类型转换。
         */
        byte b3 = b + b2;
        
        /*
         * 编译通过。
         *   在java中,常量的值是固定的,所以编译器能够对值进行判断是否在byte范围内。
         * 因此,若在范围内,则编译通过;否则,编译失败。
         */
        byte b4 = 4 + 5;
}
}


作者: 黑马王晓明    时间: 2013-7-30 23:20
        byte b = 4;
        byte b2 = 5;
        byte b3 = b + b2;  编译不能通过,什么原因呢?
        byte b4 = 4  + 5 ;  编译通过

简单地说b和b2是两个变量,虽然已经赋初始值,但是变量的值是可以被改变的
两个变量相加的结果就有可能超出了byte的范围 所以编译不能通过
而byte b4 = 4  + 5 ; 4+5就是一个确定的值 jvm是可以判断出它是否在byte的范围 再赋给变量b4 所以编译通过




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