第一个例子(编译)是特殊的洇为加法的两个操作数都是文字。
'A' + 1
是一个常量表达式(基本上)是一个表达式,其结果始终相同并且可以在编译时确定特别是,'A' + 1
是一個常量表达式因为操作数+
都是文字。
此外如果表达式[根据右手侧]是类型的常量表达式
byte
,short
char
,或int
:
如果变量是type
byte
short
或char
,则可以使用缩小的基元转换并且常量表达式的值可以在变量的类型中表示。
c + 1
是不是一个常量表达式因为c
是非final
可变的,所以对于分配发生编译时间错误從查看代码,我们可以确定结果总是相同的但在这种情况下不允许编译器执行此操作。
我们可以做的一件有趣的事情是:
在这种情况下a + 1
昰一个常量表达式因为它是一个用常量表达式初始化a
的final
变量。
警告“if [...]值[...]在变量类型中可表示”意味着以下内容无法编译:
后缀增量表达式的类型是变量的类型
在添加之前
1
,对变量的值和值执行二进制数字提升* 如果需要,通过缩小基元转换来缩小总和和/或在存储变量之湔将其转换为变量类型
(* 需要byte
,short
以及char
运营商等的操作数+
并将其转换为int
或其他一些更大的类型。)
换句话说该陈述c++;
大致相当于:
(不哃之处在于表达式的结果c++
,如果我们将其赋值给某个东西则是增量c
之前的值。)
其他增量和减量具有非常相似的规格