我在互联网上偶然发现了这段代码
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
int i = (byte) + (char) - (int) + (long) - 1;
System.out.println(i);
}
}
打印1
。
我能知道为什么吗?
这是来源 - > http://www.javacodegeeks.com/2011/10/weird-funny-java.html
答案 0 :(得分:18)
int i = (byte) + (char) - (int) + (long) - 1;
^-------^--------^-------^ Type casting
+ - + -
正在为该号码指定(Unary Operators)号,因此-
然后+
然后-
,最后+
为您提供1
。
如果我们只是忽略类型广告,我们会(+(-(+(-(1)))))=1
等效代码:
long a = (long) - 1;
int b = (int) + a;
char c = (char) - b;
int finalAns = (byte) + c;
System.out.println(finalAns); // gives 1
答案 1 :(得分:15)
因为在应用运算符优先级规则后,它变为等同于:
int i = (byte) ((char) -((int) ((long) -1)));
评估为-(-1)
1
。
答案 2 :(得分:8)
由于类型转换,它等同于
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
long a1 = -1;
int a2 = a1; //still -1
char a3 = -a2; // 1
byte a4 = a3; // 1
int i = a4; // 1
System.out.println(i);
}
}