让我们考虑Java中的以下简单表达式。
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("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);
虽然c是一种char,但它可以在各自的构造函数中没有错误地提供,并且所有上述语句都被视为有效语句。它们分别产生以下输出。
temp = 65
temp = 65.0
temp = 65.0
temp = 65
在这种情况下,Java中可用的 char 类型的内部行为是什么?
答案 0 :(得分:8)
Char是一种原始的数字整数类型,因此受制于这些野兽的所有规则,包括转换和促销。您需要阅读此内容,JLS是最佳来源之一:Conversions and Promotions。特别是,请阅读“5.1.2加宽原始转换”的短位。
答案 1 :(得分:0)
char有点像16位int。你可以将其他东西的整数连接到字符串上。这是Character.toString(c)的快捷方式。
如果您希望避免这种混淆,可以使用Character对象。
答案 2 :(得分:0)
基元char
和byte
是可互换的(指的是Unicode表值) - 所以是的,char
变量可以被视为数字,就像byte
一样可以。
编辑: 除了Henery在下面的评论之外,你当然是正确的,Java确实使用unicode来表示字符内容(原始文本更新以反映这一点) - 但正如我们所知,前127个ASCII和Unicode字符或多或少匹配,并且所以在字符范围0..127内执行的任何操作对于ASCII和Unicode都是相同的,这意味着在两者之间进行转换是微不足道的。
我们中间的老人可能是教过并记住大部分的ASCII表,而不是Unicode表,而且我仍然在我的办公桌上保留一张ASCII婴儿床,以便快速推荐。哦,并且为Henery的评论+1,因为我实际上澄清了我写的内容。