在Java中增加Char类型

在练习Java时我随机想出了这个:

class test { public static void main(String arg[]) { char x='A'; x=x+1; System.out.println(x); } } 

我认为它会抛出一个错误,因为我们无法在数学中将数值1添加到字母A ,但是以下程序正确运行并打印

 B 

怎么可能?

在Java中, char是一种数字类型。 将1添加到char ,将转到下一个unicode代码点 。 在'A'情况下,下一个代码点是'B'

 char x='A'; x+=1; System.out.println(x); 

请注意,您不能使用x=x+1因为它会导致隐式缩小转换。 您需要使用x++x+=1

事实上, char映射到int ,查看Ascii表 。

例如:大写A对应于十进制数65.当您向该char添加1时,您基本上将十进制数递增1.因此该数字变为66,对应于大写B.

char 一种数字类型(长度为2个字节),也是Java中唯一的无符号数字基元类型。

你也可以这样做:

 int foo = 'A'; 

这里特别的是你用字符常量而不是数字初始化char 。 正如你所见,它的特殊之处在于它的字符串表示。 你可以使用Character.digit(c, 10)来获取它的数值(作为int ,因为2 ^ 16 – 1不能用short表示!)。

这是您的程序的等效程序:

 public class Tester { public static void main(String args[]){ char start='\u0041'; char next='\u0041'+1; System.out.println(next); } } 

但是如你所见, next=start+1 ,将无效。 这就是java处理的方式。

原因可能是我们可能会意外地使用start ,整数1认为start是一个int变量并使用该表达式。 因为,java对于最小化逻辑错误非常严格。 他们按照我的想法设计了它。

但是,当你这样做时, char next='\u0041'+1; 很明显'\u0041'是一个字符, 1将隐式转换为2字节。 这不是程序员可以做的错误。 也许这就是他们允许它的原因。

char是java中的2个字节。 char支持unicode字符。 当您使用偏移量整数添加或减去char var时,将生成unicode表中的等效unicode字符。 因为, BA旁边,你得到了B

Java中的char只是一个整数,所以可以递增/递减它。 每个字符编号都有一个相应的值,根据转换表将其解释为字符:无论是ASCII编码,还是UTF-8编码等。

想想看,计算机中的每一个数据 – 图像,音乐,程序等都只是数字。 一个简单的字符也不例外,它也被编码编码为数字。

char在Java中存储为2字节的unicode值。 因此,如果char x = 'A' ,则意味着A以unicode格式存储。 在unicode格式中,每个字符都表示为整数。 因此,当你说x= x+1 ,它实际上增加了A的unicode值,它打印了B

您必须在使用括号添加之后键入强制转换结果,如下所示:

 x='A'; x = (char) (x+1); 

否则你将失去数据错误。

因为类型char有效地像16位unsigned int一样工作。

所以设置char x='A'几乎相当于int x=65当你添加一个; 你得到66; 或ASCII’B’。

每个char都有一个字符代码。 计算机将字符视为无符号数字,因此您可以增加它。