java说明_Java - 简短说明

小编典典

这些是相关的JLS部分:

[JLS 5.1.1身份

任何类型都允许从类型到相同类型的转换。

[JLS 5.2 Assignment

当将表达式的值分配给

变量时,将发生赋值转换:必须将表达式的类型转换为

变量的类型。分配上下文允许使用以下之一:

身份转换

[…]

此外,如果表达式的类型是恒定表达byte,

short,char或int:

如果变量的类型

是byte,short或char,并且常量表达式的值在变量的类型中可表示,则可以使用变窄的原始转换

上述规则解释了以下所有内容:

short a = 4; // representable constant

short b = 5; // representable constant

short c = 5 + 4; // representable constant

short d = a; // identity conversion

short e = a + b; // DOES NOT COMPILE! Result of addition is int

short z = 32767; // representable constant

short z_ = 32768; // DOES NOT COMPILE! Unrepresentable constant

至于为什么不能编译:

test(7); // DOES NOT COMPILE! There's no test(int) method!

这是因为只为

赋值定义了常量的缩小转换。不用于方法调用,它具有完全不同的规则。

特别是方法调用转换不包括作为

分配转换一部分的整数常量的隐式缩小。

Java编程语言的设计者认为,包括这些

隐式的缩小转换将为

重载的方法匹配解决过程增加额外的复杂性。

我只解释

有效的Java 2nd Edition的第41项:明智地使用重载:

确定选择哪个过载的规则非常

复杂。在语言规范中,它们占据了33页,

并且几乎没有程序员理解它们的所有精妙之处。

2020-09-26

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值