Java 中递增字符类型

问题描述 投票:0回答:11

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

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

我以为它会抛出错误,因为我们无法将数值

1
添加到数学中的字母
A
,但以下程序正确运行并打印

B 

这怎么可能?

java char
11个回答
53
投票

在Java中,

char
是数字类型。当您将
1
添加到
char
时,您将到达下一个 unicode 代码点。如果是
'A'
,下一个代码点是
'B'
:

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

请注意,您不能使用

x=x+1
,因为它会导致隐式缩小转换。您需要使用
x++
x+=1
来代替。


5
投票

A

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

例如:大写的 A 对应于十进制数 65。当您将其加 1 时,

char
,基本上就是将十进制数加 1。因此,数字变为 66,对应于大写的 B。


5
投票

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

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


4
投票

char
数字类型(2字节长),也是Java中唯一的无符号数字原始类型。

你还可以这样做:

int foo = 'A';

这里的特别之处在于,您使用

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


4
投票

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

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

否则你会遇到数据错误。


2
投票
Java中的

A

char
只是一个整数,所以可以对其进行递增/递减。每个字符编号都有一个对应的值,通过转换表将其“解释”为一个字符:无论是 ASCII 编码,还是 UTF-8 编码等。 想一想,计算机中的所有数据——图像、音乐、程序等都只是数字。简单的字符也不例外,它也被

编码

编码为数字。


2
投票
char

在 Java 中存储为 2 字节 unicode 值。所以如果

char x = 'A'
,就表示
A
是以unicode格式存储的。在 unicode 格式中,每个字符都表示为一个整数。因此,当您说
x= x+1
时,它实际上会增加
A
的 unicode 值,从而打印
B
    


0
投票

所以设置

char x='A'

几乎相当于添加一个时的

int x=65
;你得到 66;或 ASCII 'B'。
    


0
投票
char

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

    


0
投票

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

这可以避免溢出。


0
投票

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

//输出=B

© www.soinside.com 2019 - 2024. All rights reserved.