在Java中增加Char类型

时间:2013-06-15 15:06:49

标签: java char

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

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

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

B 

这怎么可能?

10 个答案:

答案 0 :(得分:29)

在Java中,char是一种数字类型。将1添加到char后,您将转到下一个unicode code point。如果是'A',则下一个代码点为'B'

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

请注意,您无法使用x=x+1,因为它会导致隐式缩小转化。您需要使用x++x+=1代替。

答案 1 :(得分:5)

char实际上已映射到int,请查看Ascii Table

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

答案 2 :(得分:3)

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

你也可以这样做:

int foo = 'A';

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

答案 3 :(得分:3)

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

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认为startint变量并使用该表达式。因为,java对于最小化逻辑错误非常严格。他们按照我的想法设计了它。

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

char是java中的2个字节。 char支持unicode个字符。当您使用偏移量整数添加或减去char var时,将生成unicode表中的等效unicode字符。由于B位于A旁边,因此您获得B

答案 4 :(得分:2)

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

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

答案 5 :(得分:2)

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

答案 6 :(得分:2)

你必须在使用括号添加后输入结果:

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

否则你将失去数据错误。

答案 7 :(得分:0)

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

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

答案 8 :(得分:0)

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

答案 9 :(得分:0)

如果您希望它只是a-z。

private char getNextChar(char c) {
    return (char)((c + 1 - 'a') % ('z' - 'a' + 1) + 'a');
}

这可以避免它溢出。