黑马程序员技术交流社区

标题: 纠结了一下午的问题(整形赋值问题) [打印本页]

作者: 785026612    时间: 2017-4-5 23:45
标题: 纠结了一下午的问题(整形赋值问题)
问题是这样的
long lo=33;不加L时,33加大最大到2^31-1,就是int上限;
short sh=8;8不能超过short上限
右边默认为int,那么第一个好理解,不能超过int取值,第二个呢,默认向下转型?既然是强转,为什么不能超过2^15-1,最后得到一个靠谱答案
字面值给整形赋值,默认为int型,给short赋值,在不超过范围时,会隐式强转,超过会报错
但是,只能对字面值,如3,5这些,右边出现变量,就不会有这些优化了,大转小直接报错
(如果有问题请帮忙指正)

作者: DreamBoyMrsLin    时间: 2017-4-5 23:51
等你学了包装类 这些你就不会去记了  
作者: 785026612    时间: 2017-4-5 23:54
DreamBoyMrsLin 发表于 2017-4-5 23:51
等你学了包装类 这些你就不会去记了

自学,已经快学好io了,今天第一天去上课,发现这个问题,我觉得基础很重要,一定要弄明白

作者: MMM521    时间: 2017-4-5 23:55
好深奥哦 ,我已经蒙圈了  
作者: Hp_Yx    时间: 2017-4-6 00:04
不懂

作者: Hp_Yx    时间: 2017-4-6 00:05
杭州,

作者: zeng1002    时间: 2017-4-6 00:16
这个其实是jvm对常量的优化机制,编译器在编译的时候可以判断常量的大小但不能判断变量的大小,整形常量是int型,但是编译器可以知道这个值是否在byte或short的范围内,在的话可以直接赋值,不在的话就会报错

作者: javaeeheima    时间: 2017-4-6 04:14
第二个也没写强转的表达式啊,你那样写会损失精度的





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2