【发布时间】:2013-11-12 11:17:44
【问题描述】:
如果它是唯一位于等号右侧的变量,是否可以将下面的变量(称为 b)称为表达式?
// This code fragment will not compile.
// c is a char, and b is a byte.
c = b;
我之所以问这个问题是因为表达式中的类型提升这个话题。我了解 Java 将所有字节提升为整数。这是该代码片段无法编译的唯一原因吗? (请注意,我知道演员表;这不是本帖的重点。非常感谢。)
编辑: 非常感谢乔恩和彼得。使用第二个示例查看此主题:
byte b = 1;
short s = 2;
s = b; // OK
s = b*2; // Not OK (compilation error)
以下情况是真的吗?
(第 3 行)Java 将字节转换为短字节。 (第 4 行)Java 将表达式 b*2 转换为 int。
如果这是正确的,那么 =b;和=b*2;是 Java 以不同方式处理的“表达式”。所以,=b; “表达式”不会转换为 int,而是扩展为 short。但是 =b*2;表达式被转换为一个 int,而不是一个 short,即使名为 s 的目标变量是一个 short。
编辑 2: 还有——
short s1, s2 = 2, s3 = 2;
s1 = s2*s3; // Not OK (compilation error)
尽管所有三个变量都是短裤,但 s2*s3;表达式被提升为 int,从而导致编译错误。
【问题讨论】:
标签: java types promotions