问答详情
源自:6-3 如何使用 Java 中的数组

求大神指导这神马回事呀。。。

public static void main(String[] args) {
     //short类型变量,内存中2个字节
     short s = 1;
     /*
       出现编译失败
       s和1做运算的时候,1是int类型,s会被提升为int类型
       s+1后的结果是int类型,将结果在赋值会short类型时发生错误
       short内存2个字节,int类型4个字节
       必须将int强制转成short才能完成赋值
     */
     s = s + 1;//编译失败
     s = (short)(s+1);//编译成功
}


大神,这道题中:s=s+1 里面的1 怎么是int的型的呢? 

short 占2个字节,难道1 不止两个字节有4个字节?那short是短整型还能存啥嘛。。。

提问者:Time时光2 2018-12-01 23:44

个回答

  • 典藏版呆呆冻
    2018-12-17 17:21:31

    首先,整数值默认 就是int类型,除此之外还有两种特殊情况:
    1.如果直接将较小的整数值(在byte或short类型的表数范围内)赋给一个byte或short变量,系统会自动把这个整数值当成byte或short类型来处理
    2.如果使用一个巨大的整数值(超出了int类型的表数范围)时,Java不会自动把这个整数值当成long类型来处理,如果希望系统把这个整数值当成long类型来处理,应在这个整数值后增加英文字母l或者L作为后缀。

    再分析题主的问题:

    short s =1;这时的s是short类型。

    s+1时,(s+1)自动转换为int类型,

    所以s=s+1编译报错,int类型不能自动转换为short。


  • 慕数据4870589
    2018-12-04 19:16:26

    1被默认为int类型,两个short型和int不能直接加

  • qq_prisoner_4
    2018-12-02 21:42:35

    默认的

  • 几点起床
    2018-12-02 17:05:59

    这是默认的;

    小于32位的变量都按int结果计算;

    强制转换会损失精度;

    short不常用,建议用int

  • 东京事变
    2018-12-02 15:32:40

    不知道