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

来源:6-3 如何使用 Java 中的数组

Time时光2

2018-12-01 23:44

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是短整型还能存啥嘛。。。

写回答 关注

5回答

  • 典藏版呆呆冻
    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。


    180416

    这个答案看不懂,表数范围是整数范围吗,1是在short和byte范围里面的,那为什么它就不行。

    2019-01-10 16:39:47

    共 1 条回复 >

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

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

    慕数据487...

    两个类型不能直接加

    2018-12-04 19:17:19

    共 1 条回复 >

  • 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

    不知道


Java入门第一季(IDEA工具)升级版

0基础萌新入门第一课,从Java环境搭建、工具使用、基础语法开始

1165172 学习 · 17581 问题

查看课程

相似问题