为什么 "int i = (byte) + (char) - (int) + (long) - 1" 的结果是1?

9
我在网上偶然发现了这段代码。
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


2
我可以知道为什么被踩了吗? - Abhishek Singh
换行并查看值。 - mmmmmm
2
这些都是一元运算符和类型转换。 - blgt
-1 是因为这是一个复制的问题;链接显示它不是... 所以 LMGTFY - ST3
3个回答

20
int i = (byte) + (char) - (int) + (long) - 1;
            ^-------^--------^-------^ Type casting

+ - + - 将符号 (一元运算符) 分配给数字,所以 - 然后 +- 最后 + 给出的结果是 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

15

因为在运算符优先级规则应用后,它变成了等价于:

int i = (byte) ((char) -((int) ((long) -1)));

这将评估为-(-1),即1


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);

}

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接