gpt4 book ai didi

java - Java 中的类型转换和自动类型提升

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:00:33 25 4
gpt4 key购买 nike

让我们考虑一下 Java 中的一些简单表达式。

byte var=0;

var=(byte)(var+1);

这里,在上面的语句中,由于自动类型提升,显然需要进行类型转换。

表达式 (var+1) 的计算自动提升为 int 因此,必须显式转换为 byte 以将其结果分配给赋值右侧的字节变量是 var


现在,让我们考虑以下 Java 语句。

var++;

这在某种程度上等同于前面的语句,并且应该需要强制转换,尽管它可以在没有强制转换的情况下工作。为什么?


即使是下面的语句也不需要转换。为什么?

byte x=var++;

最佳答案

来自Java Language Specification, §15.14.2 :

The type of the postfix increment expression is the type of the variable.

另一方面,对于表达式 var + 1,以下规则适用 (JLS, §5.6.2):

When an operator applies binary numeric promotion to a pair of operands, each of which must denote a value that is convertible to a numeric type, the following rules apply, in order, using widening conversion (§5.1.2) to convert operands as necessary:

• If any of the operands is of a reference type, unboxing conversion (§5.1.8) is performed. Then:
• If either operand is of type double, the other is converted to double.
• Otherwise, if either operand is of type float, the other is converted to float.
• Otherwise, if either operand is of type long, the other is converted to long.
• Otherwise, both operands are converted to type int.

因此,添加两个数值类型永远不会得到比 int 更窄的结果。

关于java - Java 中的类型转换和自动类型提升,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8116787/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com