黑马程序员技术交流社区

标题: 请大家用赋值来解释原因今天复习的时候看到一个比较不... [打印本页]

作者: kevindavid    时间: 2012-5-17 22:37
标题: 请大家用赋值来解释原因今天复习的时候看到一个比较不...
本帖最后由 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;
这两句代码的区别
先是搞错了抱歉哈
作者: 任睦强    时间: 2012-5-17 22:45
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!

作者: 任睦强    时间: 2012-5-17 22:46
或者是把short类型转换为int,也能运行,运行结果也是:Hello World!

作者: Fc10232    时间: 2012-5-17 22:49
很明显会有异常!!!!   编译都不会通过  根本不会显示Hello world   因为 s=s+5; 有异常,需要强制为short类型,没有强制,系统到这里后有异常,下面的打印就不会在执行,
作者: 赵方明    时间: 2012-5-17 22:49
S=S+5;中,5是int型,s是short型,s会自动转换为int型与5相加,得出的结果赋值给S会损失精度。
应将其进行强制类型转换 S=(char)(S+5);
打印结果是Hello World!
作者: Fc10232    时间: 2012-5-17 22:50
任睦强 发表于 2012-5-17 22:45
public static void main(String[] args)
    {
            short s=4;

为啥会有运行结果类?
作者: 任睦强    时间: 2012-5-17 23:07
Fc10232 发表于 2012-5-17 22:50
为啥会有运行结果类?

我在程序上运行的出结果啊
作者: 杨康    时间: 2012-5-17 23:21
打印的时候会报错,因为你定义的byte型的变量与java默认的int型常量求和,byte精度低,会提升为int型,然后两数值求和得到int型数据,最后重新赋值给你定义的byte型的s,会报损失精度,故此程序不会运行。而s += 5则是一个赋值过程,没有类型的提升转换。
作者: 古银平    时间: 2012-5-17 23:26
会报错,s=s+5;这行会损失精度,s是short ,4java默认是int型,根据自动类型转换(s+5)结果会被提升为int型,将int型的数据赋值给short型,会报错损失精度!




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