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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 偏執旳、靑春 中级黑马   /  2013-4-28 17:15  /  1399 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 偏執旳、靑春 于 2013-4-29 12:27 编辑

short s=1;
为什么可以这么赋值?
1不是int类型的么?怎么可以付给short了 ,而且还不加强制转换

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

5 个回复

倒序浏览
                这属于隐式转换,大的可以自动转换为小的,
                short长度是16位的,可表示-32768~32767范围内的数值
                范围内的int型数值可以自动转换为short,超出了编译器就报错了。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
郭华章 发表于 2013-4-28 17:24
这属于隐式转换,大的可以自动转换为小的,
                short长度是16位的,可表示-32768~32767范围内的数值
                范 ...

楼上理解绝对错误 大往小转一定要强制转换 但精度有损失
回复 使用道具 举报
谁说自然数就一定是int型了?    还可以 long l = 1;  byte b = 1; char c = 1;,我想char可能是楼上所说的那样隐式转换
回复 使用道具 举报
偏執旳、靑春 发表于 2013-4-28 17:28
楼上理解绝对错误 大往小转一定要强制转换 但精度有损失

嗯。我错了,不过我突然想到享元模式,java虚拟机应该把所有的可以共享的数值能当作同一个数值,譬如:
int a=1;
short b=1;
system.out.println(a==b)//true;

也就是说会不会java把1这个数字当成了任意可以允许表示的类型,short或int或double,而不是完全仅仅当成定义时的int类型?
回复 使用道具 举报
第一,short也是整形数据类型的。。。
第二,要是整数值在short取值范围内,可以直接用short的,若是超出了这范围,就必须用更大的数据类型了

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

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