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

ora*_*nge 74 java int primitive char addition

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

Boa*_*ann 126

添加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
Run Code Online (Sandbox Code Playgroud)

通常,您可以找到结果类型的一种方法是将其转换为Object并询问它是什么类:

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

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

如果要将字符连接为String而不是将它们解释为数字类型,则有很多方法可以做到这一点.最简单的方法是在表达式中添加一个空字符串,因为添加一个char和一个String会产生一个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')


Hot*_*cks 21

二进制算术运算charbyte(和short)推广到int- JLS 5.6.2.

  • 和一元算术运算。 (2认同)

Lio*_*ion 7

您可能希望了解以下表达式char.

char c='A';
int i=c+1;

System.out.println("i = "+i);
Run Code Online (Sandbox Code Playgroud)

这在Java中完全有效并返回66,对应的字符值(Unicode)c+1.


String temp="";
temp+=c;
System.out.println("temp = "+temp);
Run Code Online (Sandbox Code Playgroud)

这在Java中太有效了,String类型变量temp自动接受cchar类型并temp=A在控制台上生成.


以下所有语句在Java中也有效!

Integer intType=new Integer(c);
System.out.println("intType = "+intType);

Double  doubleType=new Double(c);
System.out.println("doubleType = "+doubleType);

Float floatType=new Float(c);
System.out.println("floatType = "+floatType);

BigDecimal decimalType=new BigDecimal(c);
System.out.println("decimalType = "+decimalType);

Long longType=new Long(c);
System.out.println("longType = "+longType);
Run Code Online (Sandbox Code Playgroud)

虽然c是一种类型char,但它可以在各自的构造函数中提供没有错误,并且所有上述语句都被视为有效语句.它们分别产生以下输出.

intType = 65
doubleType = 65.0
floatType = 65.0
decimalType = 65
longType =65
Run Code Online (Sandbox Code Playgroud)

char是一种原始的数字整数类型,因此受制于这些野兽的所有规则,包括转换和促销.您需要阅读此内容,JLS是最佳来源之一:转化和促销.特别是,读取"5.1.2加宽原始转换"的短位.