常量 比如123 赋值给short, 123 不是int类型吗? 为什么赋值给short不报错?

常量 比如123 赋值给short, 123 不是int类型吗? 为什么赋值给short不报错?

如题, short s = 122;  short s = (int)2; 都不报错啊, 不是大的范围赋值给小的不对吗?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

4回答
weixin_宝慕林1551746 2019-12-05 09:43:36

简单来说,因为123在二进制中是1111011,而这个值正好在short类型涵盖的范围之内,所以不会报错

好帮手慕小班 2019-11-18 14:50:23

同学你好,整型数据的存储与浮点型数据的存储方式是不同的。

        1、123默认是int类型,也就是整型数据,会通过直接赋值的方式来为变量等赋值,short类型的范围是-2的15次方~2的15次方-1,也是整型数据,123在short类型的数据范围内,java里面能进行默认的转换。

当输入内容超过short类型的范围,就不会进行默认的转换了,例如:

http://img1.sycdn.imooc.com//climg/5dd23a860997040603350086.jpg

2、 float f = 1.23,会报错,是因为 java里默认的浮点型数据是double,而浮点型数据的存储是一种科学计数法:用符号、指数和尾数来表示,因为存储方式的不同,一个double类型的数据不能直接转为float类型的数据。

综上所述,声明一个float类型的变量,需要  float f = 1.23f;  这样来声明赋值。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

好帮手慕小班 2019-11-18 10:56:28

同学你好,1、在课程的1分40秒的时候,老师讲了:如果一个浮点型的数据,末尾什么都没写,则它表示一个double类型的数据,一个double类型的数据不能直接转为float类型的数据,所以程序会直接报错。

        2、float类型的数据要在后面加上f或者F来表示,这是一个float类型的数据

http://img1.sycdn.imooc.com//climg/5dd207f30931b8ee12170476.jpg

比如:

http://img1.sycdn.imooc.com//climg/5dd2085609f76b9e05210128.jpg

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 提问者 bgkp #1
    我知道这个知识点, 我是这2个问题对比来看的. short s =123; 123默认是不是int类型呢? float f = 1.23 1.23 默认是double类型, 为什么前者不报错后者报错. 这不矛盾吗? 多谢您的解答!
    2019-11-18 11:14:08
好帮手慕柯南 2019-11-17 18:40:14

同学你好!

看下面的代码:

http://img1.sycdn.imooc.com//climg/5dd1224609cefdfc02750123.jpg

  1. 第一个赋值没有报错  是因为你定义的是short类型  值域范围是-2的15次方~2的15次方-1 , 122在这个范围内,所以编译通过

  2. 第二个是因为你定义的in是一个int类型,当你给in赋值为2的时候,这个2属于int类型,当你使用in赋值给short类型的s1的时候,编译器只认识4是一个int数据类型,将一个大数据类型装进小的数据类型,会发生溢出,虽然2也符合-128~127,但是此时2属于int类型

  3. 至于short s = (int)2;其实与第一点是一个道理,这里强转没有意义

  4. 综上所述:大的范围赋值给小的不对,建立在变量与变量之间的赋值,如果是直接赋值,java会自动转化。

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~

  • 那为什么1.23赋值给float会报错呢?也是直接赋值啊?
    2019-11-18 03:49:07
  • 1.23后面不加 f 默认是double类型,肯定会报错的
    2019-11-25 16:27:15
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师