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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 kevindavid 于 2012-5-17 23:59 编辑

class  shortdemo
{
        public static void main(String[] args)
        {
                short s=4;
                s=s+5;
                s+=5;
                System.out.println("Hello World!");
        }
}
——————————————————————————
class  shortdemo1
{
        public static void main(String[] args)
        {
                short s=4;
s+=5;
                System.out.println("Hello World!");
        }
}

说明上面两个程序打印的结果;以及为什么第一个会报错。请用赋值运算来解释
  s=s+5;
                s+=5;
这两句代码的区别
先是搞错了抱歉哈

评分

参与人数 1黑马币 +10 收起 理由
啥都不是 + 10 赞一个!

查看全部评分

8 个回复

正序浏览
会报错,s=s+5;这行会损失精度,s是short ,4java默认是int型,根据自动类型转换(s+5)结果会被提升为int型,将int型的数据赋值给short型,会报错损失精度!
回复 使用道具 举报
杨康 中级黑马 2012-5-17 23:21:27
8#
打印的时候会报错,因为你定义的byte型的变量与java默认的int型常量求和,byte精度低,会提升为int型,然后两数值求和得到int型数据,最后重新赋值给你定义的byte型的s,会报损失精度,故此程序不会运行。而s += 5则是一个赋值过程,没有类型的提升转换。
回复 使用道具 举报
Fc10232 发表于 2012-5-17 22:50
为啥会有运行结果类?

我在程序上运行的出结果啊
回复 使用道具 举报
任睦强 发表于 2012-5-17 22:45
public static void main(String[] args)
    {
            short s=4;

为啥会有运行结果类?
回复 使用道具 举报
S=S+5;中,5是int型,s是short型,s会自动转换为int型与5相加,得出的结果赋值给S会损失精度。
应将其进行强制类型转换 S=(char)(S+5);
打印结果是Hello World!
回复 使用道具 举报
很明显会有异常!!!!   编译都不会通过  根本不会显示Hello world   因为 s=s+5; 有异常,需要强制为short类型,没有强制,系统到这里后有异常,下面的打印就不会在执行,
回复 使用道具 举报
或者是把short类型转换为int,也能运行,运行结果也是:Hello World!
回复 使用道具 举报
public static void main(String[] args)
    {
            short s=4;
            s=s+5;            
            s+=5;
            System.out.println("Hello World!");
    }
红色部分程序报错,需要强制转换为short才能运行
s=(short) (s+5);
运行结果是:Hello World!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马