在Java中增加Char类型

Mah*_*dar 24 java char

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

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

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

B 
Run Code Online (Sandbox Code Playgroud)

怎么可能?

das*_*ght 34

在Java中,char是一种数字类型.当您添加1到a时char,您将进入下一个unicode代码点.如果是'A',下一个代码点是'B':

char x='A';
x+=1;
System.out.println(x);
Run Code Online (Sandbox Code Playgroud)

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


pin*_*her 5

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

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

但如您所见,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


Rva*_*est 5

A char实际上映射到a int,查看Ascii表.

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