转换为基本类型的奇怪java行为

Den*_*kiy 29 java

这可能是在某个地方被问到但我找不到它.有人可以澄清为什么这个代码编译和打印出来1

long i = (byte) + (char) - (int) + (long) - 1;
System.out.println(i);
Run Code Online (Sandbox Code Playgroud)

Mys*_*ial 41

它被解析为:

long i = (byte)( +(char)( -(int)( +(long)(-1) ) ) );
Run Code Online (Sandbox Code Playgroud)

所有+-运营商都是一元+或者-.

在这种情况下,1得到否定两次,所以它打印为a 1.


Dav*_*ton 5

因为'+'和' - '都是一元运算符,并且演员正在处理那些一元的操作数.其余的是数学.


dav*_*ink 5

一元运算符和铸造:)

+1是合法的

(byte)+ 1将+1转换为一个字节.

偷偷摸摸的!让我思考.