在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
字符。 因为, B
在A
旁边,你得到了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
都有一个字符代码。 计算机将字符视为无符号数字,因此您可以增加它。