Boa*_*ann 126
添加Java字符,短路或字节的结果是int:
- 如果任何操作数是引用类型,则执行拆箱转换(第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')您可能希望了解以下表达式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加宽原始转换"的短位.