Java中的char类型有点奇怪吗?

Bha*_*esh 3 java char

让我们考虑Java中的以下简单表达式.

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

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

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


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

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


所有以下陈述在Java中也令人惊讶地有效!

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

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

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

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

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

temp = 65
temp = 65.0
temp = 65.0
temp = 65
Run Code Online (Sandbox Code Playgroud)

在这种情况下,Java中可用的char类型的内部行为是什么?

Hov*_*els 8

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