让我们看一下Java中的以下代码片段。
package typecasting;
final public class TypeCasting
{
public static void main(String[] args)
{
int i = (byte) + (char) - (int) + (long) - 1;
System.out.print("\n i = "+i+"\n");
}
}
声明System.out.print("\n i = "+i+"\n");
显示 i = 1 。怎么样?
答案 0 :(得分:7)
此代码使用一元+
和-
运算符。
它等同于-(-1)
并带有一堆额外的强制转换。 (unary +
operator不会更改值)
答案 1 :(得分:4)
该行:
(byte) + (char) - (int) + (long) - 1;
被解析为:
(byte) (+(char) (-(int) (+(long)(-1) ) ) );
所有+
和-
都是一元运算符。由于有两个-
,1
被否定两次,因此整个表达式的计算结果为1
。
答案 2 :(得分:3)
运营商被视为一元 +和一元 - 。
int i = (byte) (+ (char) (- (int) (+ (long) (- 1))));
答案 3 :(得分:2)
JLS指定以下内容:
CastExpression: ( PrimitiveType Dimsopt ) UnaryExpression ( ReferenceType ) UnaryExpressionNotPlusMinus
这意味着任何表达式(原始类型)后面都是一个UnaryExpression。如果我接受你的陈述并将[]
放在一元表达式周围:
(byte)
[+(char)
[-(int)
[+(long)
[-1]
]
]
];