A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 熊永标 中级黑马   /  2013-4-10 17:27  /  2081 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

short s=3为什么不会出错,java整数默认类型是int,那把一个int类型赋给一个short类型,为什么不会出错呢.请求答案

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

6 个回复

倒序浏览
jvm会自动检测等号右边的常量值是否在左边类型范围内,如果在这个范围内,那么是可以直接赋值。
但是float f = 1.23,这个式子是非法的,因为浮点型不能用二进制精度描述。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
short类型的数据参与运算时会自动转化成int类型。
把一个int类型的值赋给一个short类型的会出错,需要进行强制类型转换
short a,b,c;
a=1;b=2;
c=a+b;(会报错:不能从int转换为short)
c=(short)(a+b); 则可通过编译

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
在执行这一条语句时,系统会去先判断3是否在short的范围内,而short在内存是占两个字节,也就是说其范围为:—65536——————65535。所以不会出错的。

点评

这个范围错了~。。。  发表于 2013-4-10 21:33

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
这是在声明变量的时候初始化值,这时候有判断的过程,检测值有没有超过范围。

java一种强类型语言,是为了避免变量之间的混乱,能够使变量之间的使用更规范,习惯了就好。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
整型,字符型,浮点型的数据在混合运算的中相互转换时遵循以下的原则:
容量小的类型自动转换为容量大的数据类型;数据类型按容量大小排序为:
byte,short,char->int->float->double
byte,short,char之间不会互相互换,他们三者在计算时首先转换成int类型
容量大的数据类型转换为容量小的数据类型时,要加上强制转换符,但可能造成精度降低或溢出

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报

short x = 1;
这样是不会出错的。


楼上的有一楼说short的范围是-65536~65536是错的,不信自己试一下。
short的范围是-32768~32768(2的(16-1)次幂),32767就可以编译通过了。


short是short int的缩写,所以包含于int。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马