正在回答 回答被采纳积分+1
简单来说,因为123在二进制中是1111011,而这个值正好在short类型涵盖的范围之内,所以不会报错
同学你好,整型数据的存储与浮点型数据的存储方式是不同的。
1、123默认是int类型,也就是整型数据,会通过直接赋值的方式来为变量等赋值,short类型的范围是-2的15次方~2的15次方-1,也是整型数据,123在short类型的数据范围内,java里面能进行默认的转换。
当输入内容超过short类型的范围,就不会进行默认的转换了,例如:
2、 float f = 1.23,会报错,是因为 java里默认的浮点型数据是double,而浮点型数据的存储是一种科学计数法:用符号、指数和尾数来表示,因为存储方式的不同,一个double类型的数据不能直接转为float类型的数据。
综上所述,声明一个float类型的变量,需要 float f = 1.23f; 这样来声明赋值。
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
同学你好!
看下面的代码:
第一个赋值没有报错 是因为你定义的是short类型 值域范围是-2的15次方~2的15次方-1 , 122在这个范围内,所以编译通过
第二个是因为你定义的in是一个int类型,当你给in赋值为2的时候,这个2属于int类型,当你使用in赋值给short类型的s1的时候,编译器只认识4是一个int数据类型,将一个大数据类型装进小的数据类型,会发生溢出,虽然2也符合-128~127,但是此时2属于int类型
至于short s = (int)2;其实与第一点是一个道理,这里强转没有意义
综上所述:大的范围赋值给小的不对,建立在变量与变量之间的赋值,如果是直接赋值,java会自动转化。
如果我的回答解决了你的疑惑,请采纳,祝学习愉快~
- 参与学习 人
- 提交作业 3802 份
- 解答问题 11489 个
本阶段带你迈入Java世界,学习Java必备基础知识,基础语法、面向对象思想以及常用工具类的使用。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星