我在互联网上偶然发现了这个代码
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
int i = (byte) + (char) - (int) + (long) - 1;
System.out.println(i);
}
}
Run Code Online (Sandbox Code Playgroud)
它打印1.
我能知道为什么吗?
这是源 - > http://www.javacodegeeks.com/2011/10/weird-funny-java.html
Cod*_*roc 18
int i = (byte) + (char) - (int) + (long) - 1;
^-------^--------^-------^ Type casting
Run Code Online (Sandbox Code Playgroud)
+ - + -被分配标志(目运算符)的数目,所以-再+然后-,最后+给你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
Run Code Online (Sandbox Code Playgroud)
Old*_*eon 15
因为在应用运算符优先级规则后,它变得等效于:
int i = (byte) ((char) -((int) ((long) -1)));
Run Code Online (Sandbox Code Playgroud)
评估-(-1)哪个是1.
由于类型铸造它相当于
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);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2276 次 |
| 最近记录: |