BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #34336同步于 2014/9/2
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

为什么100可以赋值给short、byte?

zcyes
2014/9/2镜像同步9 回复
最近复习java,突然发现一个问题。 例子1: short a = 100; //ok short b = 1000000; //error, cannot convert from int to short(short两字节不够,可以理解,但是看例子2) 例子2: short a = 100; //ok a += 1000000; //ok 数值常量是int,但是为什么可以直接赋给short呢? 这个为什么呀,求懂编译原理的大神解答。不胜感激。
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
ylewxh机器人#1 · 2014/9/2
是不是像c++一样发生了类型自动转换?
wangxiaobupt机器人#2 · 2014/9/2
先转换成int 再进行计算 【 在 zcyes (haha) 的大作中提到: 】 : 最近复习java,突然发现一个问题。 : 例子1: : short a = 100; //ok : ...................
zcyes机器人#3 · 2014/9/2
【 在 ylewxh 的大作中提到: 】 : 是不是像c++一样发生了类型自动转换? 多谢回答。 不太了解C++,但是按理说无论C++/java中int转short应该是强制转换呀。 我主要的问题是为什么编译器没有要求强制转换。而是可以直接用数值常量赋值给short,编译器是怎么处理这段赋值过程的。
zcyes机器人#4 · 2014/9/2
【 在 wangxiaobupt 的大作中提到: 】 : 先转换成int : 再进行计算 : 额,多谢解答,不过我的问题不是这个。:)
ylewxh机器人#5 · 2014/9/2
【 在 zcyes 的大作中提到: 】 : 多谢回答。 : 不太了解C++,但是按理说无论C++/java中int转short应该是强制转换呀。 : 我主要的问题是为什么编译器没有要求强制转换。而是可以直接用数值常量赋值给short,编译器是怎么处理这段赋值过程的。 不太明白lz的意思。按照c++ primer里的解释,这种都是先自动向高精度转换,然后截断,不会要求强制转换,不知道lz是不是想问这个,可以看看primer
wangxiaobupt机器人#6 · 2014/9/2
我的意思是 变量a会从short类型转换为int类型 再进行计算 类型 小变大 可以自动 大变小需要强制 【 在 zcyes (haha) 的大作中提到: 】 : 额,多谢解答,不过我的问题不是这个。:)
zcyes机器人#7 · 2014/9/3
【 在 wangxiaobupt 的大作中提到: 】 : 我的意思是 变量a会从short类型转换为int类型 再进行计算 : 类型 小变大 可以自动 : 大变小需要强制 : ................... 感觉不太明白你们的解答,举个简单点的例子哈: float的例子: float a = 1.1; //编译不通过, 1.1是double, 赋值给float是高精度转低精度,需要强制转换 float b = (float) 1.1; //编译通过 short的例子: short c = 2; //编译通过, 但是2是int,赋值给short是高精度转低精度,为什么这里不需要强制转换,即short c = (int)2;?
wangxiaobupt机器人#8 · 2014/9/3
参与运算的时候 c先变成int类型 再参与运算和赋值 【 在 zcyes (haha) 的大作中提到: 】 : 感觉不太明白你们的解答,举个简单点的例子哈: : float的例子: : float a = 1.1; //编译不通过, 1.1是double, 赋值给float是高精度转低精度,需要强制转换 : ...................
container机器人#9 · 2014/9/4
a+=1000;对于+=运算符,java 编译器等同于a=(short)(a+1000); 【 在 zcyes 的大作中提到: 】 : 最近复习java,突然发现一个问题。 : 例子1: : short a = 100; //ok : ...................