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

当添加'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 (int), ladd (long), fadd (float), dadd (double)的指示,就是这样。 为了用较小的类型来模拟x += y ,编译器将使用iadd ,然后使用诸如i2c (“int to char”)的指令将int的高位字节清零。 如果本机CPU具有专用于1字节或2字节数据的指令,则需要由Java虚拟机在运行时对其进行优化。

    如果你想将字符连接成一个字符串而不是将它们解释为一个数字类型,有很多方法可以做到这一点。 最简单的方法是在表达式中添加一个空字符串,因为添加一个字符和一个字符串会得到一个字符串。 所有这些表达式导致字符串"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 )的二进制算术运算提升为int - JLS 5.6.2。


    你不妨学习下面关于char表达式。

    char c='A';
    int i=c+1;
    
    System.out.println("i = "+i);
    

    这在Java中非常有效,并返回66 ,即c+1的字符(Unicode)的相应值。


    String temp="";
    temp+=c;
    System.out.println("temp = "+temp);
    

    这在Java中非常有效,并且String类型变量temp自动接受char类型的c ,并在控制台上生成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);
    

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

    intType = 65
    doubleType = 65.0
    floatType = 65.0
    decimalType = 65
    longType =65
    

    char是一个原始的数字整数类型,因此受制于这些野兽的所有规则,包括转换和促销。 您需要阅读此内容,而JLS是此类最佳来源之一:转换和促销。 特别是,阅读“5.1.2扩展原始转换”中的简短位。

    链接地址: http://www.djcxy.com/p/73689.html

    上一篇: In Java, is the result of the addition of two chars an int or a char?

    下一篇: WPF: Combobox losing selected index after bound ItemSource collection changes