Java编译器通过`(byte)+(char)-(int)+(long)-1`解释什么?

翁伟:

可能重复:
转换为基本类型的怪异Java行为

为什么用Java编写此代码,

int i = (byte) + (char) - (int) + (long) - 1;
System.out.println(i);

打印1?为什么还要编译?

资料来源:Java Code Geeks

luiscubal:

您正在做的是将类型转换与一元运算符结合在一起。

让我们来看看:

首先,您具有将值-1转换为type的值long

然后,您执行一元运算+,该运算不会更改值,所以您仍然有(long) -1

然后,将其转换为int,这样我们就有了int -1然后,使用一元运算符-,所以我们有-(-1),这就是1

然后将其转换为char,这样我们就可以了char 1然后,您使用一元运算符+,因此您仍然有1

最后,将值强制转换为byte,因此您拥有byte 1然后将其再次(隐式)转换为int

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

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

为什么编译器将“ char”与“ int”而不是“ short”匹配?

为什么对于char,编译器为什么更喜欢int重载而不是varargs char重载?

Java中long,double,byte,char的用途是什么?

关于char或int或short或long或unsigned的警告

Arduino将char的unint long int形式*

为什么'(int)(char)(byte)-2'在Java中产生65534?

Java:long结果= -1:无法从int转换为long

编译器宏以测试uint64_t和unsigned long long int之间的差异

在C ++中,“ long”,“ long long”,“ long int”和“ long long int”有什么区别?

如果byte + byte = int为什么int + int不是short / long?在C#中

Java算术int与long

为什么i + = l编译,而i是int而l是long?

如果结果必须为int,为什么Java编译器为什么允许int / int除法?

long int转换为char:C中的奇怪输出

如何从char缓冲区创建long int?

long long和long int有什么区别

Java:为什么我不能将int转换为Long

尝试将char *添加到int时触发编译器错误?

为什么Java编译器不喜欢原始int作为HashMap中值的类型?

错误:在编译`gcc`时,将'-1'的转换范围从'int'缩小为'long unsigned int'[-Wnarrowing]

为什么编译器将char * p [10]视为char ** p?

当对char *进行类型定义并通过结构进行访问时,为什么编译器会看到char *与printf的转换说明符“ s”不匹配?

如何将 unsigned long long int 转换为 unsigned char*?

为什么我在扩展方法中的 `char` 参数被解释为 `int`?

Java char也是int吗?

Java:从char解析int值

Java-char,int转换

从Char到Int的转换Java