这个java代码背后的逻辑是什么

Jav*_*eek 1 java

我遇到了java line下面,并对其输出感到困惑.你能解释一下这段代码背后的逻辑吗?

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

输出:

65535
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 12

嗯,这相当于:

byte b = -1;
char c = (char) b; // c = '\uFFFF' - overflow from -1
int i = c; // i = 65535
Run Code Online (Sandbox Code Playgroud)

真的是int在原版中的显式转换只是为了调用System.out.println(int)而不是System.out.println(char).

我相信byte,以char转换实际上经历了隐式扩大转换第一-所以它是这样的真:

byte b = -1;
int tmp = b; // tmp = -1
char c = (char) tmp; // c = '\uFFFF'
Run Code Online (Sandbox Code Playgroud)

这些帮助有用?

  • @Martijn:是的,你对`char`是Java中唯一的无符号原语是绝对正确的. (4认同)
  • @Sukumar:那是因为控制台无法识别字符"0xFFFF". (2认同)

Nei*_*fen 5

它是一样的

System.out.println((int) '?');

  • (byte) -1 给出:-1
  • (char) -1 给出:?
  • (int) '?' 给出了65535