lazydev lazydev - 10 months ago 47
Java Question

Why mixing + and cast does not produce an error in "+(int)+(long)-1"?

Why does this print 1?

import java.util.*;
import java.lang.*;

class Main
public static void main (String[] args) throws java.lang.Exception
// your code goes here

Can we mix casting and
unary operators? I know that we can do casting multiple times, but why doesn't putting
+ ,-
unary operators in between produce an error?

Answer Source

You are not adding nor substracting. Those + and - operators are unary sign operators.

See documentation at The Unary Operators section.

The sequence at stake:


is evaluated from right to left like this:

the initial value is -1
casting to long (which is still -1)
unary + sign (still -1)
casting to int (still -1)
unary - sign (now the value is 1)
so on (the value remains 1 until the end)