返回信息流最近复习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呢?
这个为什么呀,求懂编译原理的大神解答。不胜感激。
这是一条镜像帖。来源:北邮人论坛 / java / #34336同步于 2014/9/2
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
为什么100可以赋值给short、byte?
zcyes
2014/9/2镜像同步9 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
先转换成int
再进行计算
【 在 zcyes (haha) 的大作中提到: 】
: 最近复习java,突然发现一个问题。
: 例子1:
: short a = 100; //ok
: ...................
【 在 ylewxh 的大作中提到: 】
: 是不是像c++一样发生了类型自动转换?
多谢回答。
不太了解C++,但是按理说无论C++/java中int转short应该是强制转换呀。
我主要的问题是为什么编译器没有要求强制转换。而是可以直接用数值常量赋值给short,编译器是怎么处理这段赋值过程的。
【 在 zcyes 的大作中提到: 】
: 多谢回答。
: 不太了解C++,但是按理说无论C++/java中int转short应该是强制转换呀。
: 我主要的问题是为什么编译器没有要求强制转换。而是可以直接用数值常量赋值给short,编译器是怎么处理这段赋值过程的。
不太明白lz的意思。按照c++ primer里的解释,这种都是先自动向高精度转换,然后截断,不会要求强制转换,不知道lz是不是想问这个,可以看看primer
我的意思是 变量a会从short类型转换为int类型 再进行计算
类型 小变大 可以自动
大变小需要强制
【 在 zcyes (haha) 的大作中提到: 】
: 额,多谢解答,不过我的问题不是这个。:)
【 在 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;?
参与运算的时候 c先变成int类型 再参与运算和赋值
【 在 zcyes (haha) 的大作中提到: 】
: 感觉不太明白你们的解答,举个简单点的例子哈:
: float的例子:
: float a = 1.1; //编译不通过, 1.1是double, 赋值给float是高精度转低精度,需要强制转换
: ...................
a+=1000;对于+=运算符,java 编译器等同于a=(short)(a+1000);
【 在 zcyes 的大作中提到: 】
: 最近复习java,突然发现一个问题。
: 例子1:
: short a = 100; //ok
: ...................