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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马李文 中级黑马   /  2013-7-30 22:53  /  855 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黑马李文 于 2013-7-30 23:32 编辑

        byte b = 4;
        byte b2 = 5;
        byte b3 = b + b2;  编译不能通过,什么原因呢?
        byte b4 = 4  + 5 ;  编译通过

评分

参与人数 1黑马币 +3 收起 理由
杨兴庭 + 3

查看全部评分

3 个回复

倒序浏览
byte b3 = b + b2;//不能通过的原因是 byte类型的b和b2是变量,所以java虚拟机会考虑b和b2相加的结果会超出-128~127的范围,所以会报错。
                //解决方法 byte b3 = (byte)(b+b2);
希望与楼主互相探讨{:soso_e100:}

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报

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;
}
}

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1 赞一个!

查看全部评分

回复 使用道具 举报
        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 所以编译通过
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马