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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄小钒 中级黑马   /  2012-4-13 21:21  /  1912 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Test
{
        public static void main(String[] args)
        {
                short s1 =1;
                s1 = s1+s1;
                System.out.println(s1);

        }
}

//s1 为 short类型,s1+s1 为何编译会出错?此处发生数据类型转换了吗?

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

5 个回复

正序浏览
因为s1是变量,而变量的值是会变化的,因此我们不确定其具体的值,所以默认使用int类型进行存储。
回复 使用道具 举报
不用强转也可以
把s1=s1+s1 改成 s1+=s1  两次运算变成一次运算
回复 使用道具 举报
进行s1+s1运算时,会自动提升s1的类型,所以结果为int型,再赋值给s1需强制类型转换
回复 使用道具 举报
Java中涉及byte、short和char类型的运算操作首先会把这些值转换为int类型,然后对int类型值进行运算,最后得到int类型的结果。如果需要得到short类型结果,必须将这个int类型的结果转换为short类型s1 = (short)(s1+s1),在这个过程中计算机中数值进行运算的时候可能会发生溢出错误。所以在进行运算时要考虑一下数值的大小,以免溢出。

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1 赞一个!

查看全部评分

回复 使用道具 举报
精度小于int的数值在运算的时候会自动转为int后计算,所以你要进行强转:s1 = (short)(s1+s1)

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马