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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 魔心邪 中级黑马   /  2015-5-3 12:47  /  965 人查看  /  17 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/*
        面试题:下面的语句有没有问题,如果有,请解释。
                byte b1 = 3;
                byte b2 = 4;
                byte b3 = b1 + b2;
                byte b4 = 3 + 4;

                有问题,在byte b3 = b1 + b2;报错。
                解释:
                        b1 + b2在参与运算的时候,首先会自动转换成int类型。
                        在这个时候,b1和b2其实都被提升了类型。
                        所以,他们的计算结果也应该是int类型。
                        最终,就相当于直接把int类型赋值给byte类型,所以,会有精度的损失。

                        如果参与运算的是常量,编译器会先计算值,在看该值是否是左边能够表示的范围。
                        如果是,就不报错。
*/
class VariableDemo4
{
        public static void main(String[] args)
        {
                byte b1 = 3;
                byte b2 = 4;
                byte b3 = (byte)(b1 + b2);
                byte b4 = 3 + 4;

                System.out.println(b3);
                System.out.println(b4);
        }
}

17 个回复

倒序浏览
byte b4=3+4;
这也要报错。3和4默认int型,付给byte型容易损失精度。
这哥们头像贼牛弊。

点评

这句不会报错。你自己试试  发表于 2015-5-3 13:06
回复 使用道具 举报
确实是这样的
回复 使用道具 举报
1017161726 发表于 2015-5-3 12:56
byte b4=3+4;
这也要报错。3和4默认int型,付给byte型容易损失精度。
这哥们头像贼牛弊。 ...

搜迪斯奈。。。
回复 使用道具 举报
bye b4会报错,3,4,都是默认为int型的,损失精度
回复 使用道具 举报
这个问题值得深思!
回复 使用道具 举报
正解!!
回复 使用道具 举报
byte b4 = 3 + 4; 这个不会报错,byte b3 = b1 + b2;损失精度。byte b3 = (byte)(b1 + b2)属于强转
回复 使用道具 举报
1017161726 发表于 2015-5-3 12:56
byte b4=3+4;
这也要报错。3和4默认int型,付给byte型容易损失精度。
这哥们头像贼牛弊。 ...

这句是没错的
回复 使用道具 举报
0416_张威 发表于 2015-5-3 13:27
bye b4会报错,3,4,都是默认为int型的,损失精度

这句是不会报错的,你的运算是两个常量,会先确定你的值的范围,看是否在左边的范围内,正如此时,3+4=7,,7是在-128和127之间的,所以不会报错
回复 使用道具 举报
you got it
回复 使用道具 举报
就是显式转换和隐式转换的问题,,也有叫自动转换和强制转换的
回复 使用道具 举报
原来如此。
回复 使用道具 举报
学习了 赞一个
回复 使用道具 举报
这个题目拿出来好多次了,下次换个形式。
回复 使用道具 举报
嗦嘎嗦嘎
回复 使用道具 举报
容易忽视的问题  学习了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马