在Java中,添加两个字符的结果是int还是char?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (107)

添加'a' + 'b'它时产生195.是输出数据类型char还是int

提问于
用户回答回答于

添加Java字符,短裤或字节的结果是int

关于二进制数字促销的Java语言规范

  • 如果任何操作数是引用类型,则执行拆箱转换(§5.1.8)。然后:
  • 如果其中一个操作数是double类型,另一个操作数转换为double。
  • 否则,如果任一操作数的类型为float,则另一个操作数转换为float。
  • 否则,如果任一操作数的类型为long,则另一个操作数转换为long。
  • 否则,两个操作数都转换为int类型。

但请注意它对复合赋值运算符(如+ =)的看法

二进制运算的结果被转换为左边变量的类型...并且转换的结果被存储到变量中。

例如:

char x = 1, y = 2;
x = x + y; // compile error: "possible loss of precision (found int, required char)"
x = (char)(x + y); // explicit cast back to char; OK
x += y; // compound operation-assignment; also OK

一般来说,你可以找出结果的类型的一种方法是将其转换为对象并询问它是什么类:

System.out.println(((Object)('a' + 'b')).getClass());
// outputs: class java.lang.Integer

如果您对性能感兴趣,请注意,Java字节码甚至没有用于较小数据类型的算术专用指令。例如,对于添加,有指令iadd(对于整数),ladd(对于长整数),fadd(对于浮点数),dadd(对于双精度),就是这样。为了x += y用较小的类型进行模拟,编译器将使用iadd并且然后使用诸如i2c(“int to char”)之类的指令将int的高位字节清零。如果本机CPU具有专用于1字节或2字节数据的指令,则需要由Java虚拟机在运行时对其进行优化。

如果你想把字符连接成一个String而不是将它们解释为一个数字类型,有很多方法可以做到这一点。最简单的方法是在表达式中添加一个空字符串,因为添加一个字符和一个字符串会得到一个字符串。所有这些表达式都会导致字符串"ab"

  • 'a' + "" + 'b'
  • "" + 'a' + 'b'(这是有效的,因为"" + 'a'首先得到评估;如果""最后得到结果"195"
  • new String(new char[] { 'a', 'b' })
  • new StringBuilder().append('a').append('b').toString()
  • String.format("%c%c", 'a', 'b')
用户回答回答于

二进制算术运算charbyte(和short)推广到intJLS 5.6.2。

扫码关注云+社区