黑马程序员技术交流社区
标题:
向学长们求教啊!
[打印本页]
作者:
haitianzhilian
时间:
2014-3-6 09:24
标题:
向学长们求教啊!
小弟刚学java课程,编译
"short s=1;s=s+1;"时
出现错误,这是怎么回事啊?
作者:
Aimer_WJY
时间:
2014-3-6 10:15
s 是short类型的 s=s+1;这里的1是整型,字节长度不一样 所以不能相加。
作者:
咖啡@糖豆
时间:
2014-3-6 10:23
public class TestShort
{
public static void main(String[] args){
short s=1;
s=s+1;
System.out.println(s);
}
}
复制代码
QQ图片20140306101022.jpg
(37.83 KB, 下载次数: 24)
下载附件
2014-3-6 10:10 上传
s=s+1这句先执行s+1然后把结果赋给s,由于1为int类型,所以s+1的返回值是int类型,类型转换可由小到大自动转,即byte->short->int->long如果反过来会丢失精度,必须进行显示类型转换,这样写“s+=1”可以,因为+=是操作符,在解析时候s+=1就等价于s = (short)(s+1),属强制转换,希望对你有帮助
作者:
sanguodouble1
时间:
2014-3-6 10:52
这是因为你在执行s=s+1;时,进行了向下转型,也就尝试着将int类型转换为short,
而向下转型必须要自己强制转换
原理:
byte,short,char互相之间不能转换,需要全部转换为int再计算
然后说下过程吧:
其实他是这样执行的,在执行s+1时,会把s先转化成int类型,然后和1相加,这时的值2也是int类型
然后你尝试着把4个字节的int类型赋值给2个字节的short类型,所以就报错了
修复方法:s = (char)(s+1);
作者:
何伟超
时间:
2014-3-6 19:07
系统默认整数型变量为int。你定义的s是short类型,但是s+1计算时默认结果为int类型。short是不等于int的。所以系统会报错!!!
作者:
山治0712
时间:
2014-3-6 21:04
s是short类型的,加1之后被提升为int类型了,int类型的结果赋给short类型的s肯定不行的,有两种解决,一是将(s+1)强转成short类型--(int)(s+1),二是将s=s+1替换成s+=1
作者:
徐瑶
时间:
2014-3-6 22:18
这是java中数据类型导致的
short s=1;//是给short类型的变量初始化值
s=s+1//
因为1默认为int类型,,所以和short类型的相加就出错了,
可以加上:
short s=1;
s=(short)s+1;
强转为short类型
作者:
Aenon
时间:
2014-3-6 23:11
8种基本数据类型,除了boolean之外,从小范围的值到大范围的值可以自动转换,因为不会丢失数据和精度
byte-->short-->int-->long-->float-->double
char-->int-->long-->float-->double
long-->float:可认为float的范围大,对于存储空间而言,存储空间大范围也就大,对于整数是精确存储,
所以整数和存储空间是依依对应的,但是实型数据的存储是近似储存。
虽然能够自动进行,但是这种自动转换比较特殊,它有可能丢掉数据
小范围的到大范围的转换会丢失数据可精度就,这个时候就需要程序员自己考虑是不是要强转。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2