为什么“int i =(byte)+(char) - (int)+(long) - 1”是1?

时间:2014-07-16 13:22:35

标签: java

我在互联网上偶然发现了这段代码

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

3 个答案:

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

}

}