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是短整型还能存啥嘛。。。
首先,整数值默认 就是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。
1被默认为int类型,两个short型和int不能直接加
默认的
这是默认的;
小于32位的变量都按int结果计算;
强制转换会损失精度;
short不常用,建议用int
不知道