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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

7 个回复

倒序浏览
等你学了包装类 这些你就不会去记了  
回复 使用道具 举报
DreamBoyMrsLin 发表于 2017-4-5 23:51
等你学了包装类 这些你就不会去记了

自学,已经快学好io了,今天第一天去上课,发现这个问题,我觉得基础很重要,一定要弄明白
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
好深奥哦 ,我已经蒙圈了  
回复 使用道具 举报
回复 使用道具 举报
回复 使用道具 举报
这个其实是jvm对常量的优化机制,编译器在编译的时候可以判断常量的大小但不能判断变量的大小,整形常量是int型,但是编译器可以知道这个值是否在byte或short的范围内,在的话可以直接赋值,不在的话就会报错
来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端
回复 使用道具 举报
第二个也没写强转的表达式啊,你那样写会损失精度的
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马