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

Abh*_*ngh 8 java

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

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.


Kon*_*hov 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);

}

}
Run Code Online (Sandbox Code Playgroud)