为了账号安全,请及时绑定邮箱和手机立即绑定

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

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 回答

首先,整数值默认 就是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。


3 回复 有任何疑惑可以回复我~
#1

180416

这个答案看不懂,表数范围是整数范围吗,1是在short和byte范围里面的,那为什么它就不行。
2019-01-10 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~
#1

慕数据4870589

两个类型不能直接加
2018-12-04 回复 有任何疑惑可以回复我~

默认的

0 回复 有任何疑惑可以回复我~

这是默认的;

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

强制转换会损失精度;

short不常用,建议用int

0 回复 有任何疑惑可以回复我~

不知道


0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Java入门第一季(IDEA工具)升级版
  • 参与学习       1165455    人
  • 解答问题       17585    个

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

进入课程

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信