Java char也是int?

Java char is also an int?

我正在尝试为 class 完成一些代码:

public int getValue(char value) {
    if (value == 'y') return this.y;
    else if (value == 'x') return this.x;

由于我可能最终无法return任何事情,它告诉我最后这样做:

return value;

这让我感到惊讶,因为该方法的 return 类型是 int 类型。然而,它告诉我 return 一个 char!我正在使用 eclipse,并且习惯了无穷无尽的警告和东西,这是一个很大的惊喜。

那么,char 真的是 int 吗?为什么会这样?

A char 小于 int,因此您可以 return 它并且它会在前面加上零以构成更长的数字。 return 这不是正确的做法——在你的情况下,我可能会抛出异常;然而,编辑建议它是因为它是您 允许 到 return 并且您需要 return 的东西。

以下代码是合法的:

char c = 'h';
int i = c;

存在从 intchar 的隐式自然转换,反之亦然。请注意,您因此在 charm 上定义了通常的算法,当您想要迭代字母表时,它会非常方便:

for (char c='a' ; c<='z' ; c++) { ... }

但是,请注意 char 的长度为 2 个字节,而 int 的长度为 4 个字节,因此将 int 向下转换为 char 可能会导致整数溢出。

在计算中,一切都是数字!只是位和字节。

intcharbyteshortlong 只是数字。 char 只是编译器知道的一个数字,通常用于显示由特定数字表示的字符(例如 32 = space、48 = 零等)。

字符串是数字和其他东西的序列,所以有点复杂。我们不想去那里。

int 是一个四字节数字,而 char 是一个两字节数字,因此您可以在 int 中放入任何 char 数字。

Java 的设计者刚刚决定他们可以让您从 char 转换为 int,而无需任何特殊的转换或转换。

char 不是 int。但是,它是整型。也就是说,它被认为是一个可以与其他整数类型(longshortbyteint)相互转换的整数,根据Java Language Specification.

基本上这意味着它与 int 的赋值兼容。它的值在 0 到 65535 之间,如果你将它分配给一个 int 或将它转换为一个 int 并打印它,你将得到它所代表的字符的 UTF-16 值。

Java Language Specification 状态

When a return statement with an Expression appears in a method declaration, the Expression must be assignable (§5.2) to the declared return type of the method, or a compile-time error occurs.

其中管理一个值是否可分配给另一个值的规则定义为

Assignment contexts allow the use of one of the following:

19 specific conversions on primitive types are called the widening primitive conversions:

  • char to int, long, float, or `double

最后

A widening primitive conversion does not lose information about the overall magnitude of a numeric value in the following cases, where the numeric value is preserved exactly: [...]

A widening conversion of a char to an integral type T zero-extends the representation of the char value to fill the wider format.

简而言之,作为return语句表达式的char值可以通过扩展原始转换分配给return类型的int

根据定义(在 java 中),char 是一个 8 位无符号整数。 (0 到 256)

一个 int 一个 32 位有符号整数。 (−2.147.483.648 到 2.147.483.647)

char a = 65;                    //65 is the ASCII Number of 'A'
System.out.println(a);
>>> A

b = a + 1
System.out.println(b);
>>> B

java 自动装箱将 char 转换为 int,反之亦然

希望这个小例子能解决您的困惑:

public int getValue(int value) { 
    if (value == 'y') 
        return this.y; 
    else if (value == 'x') 
        return this.x; 
}

如果像 getValue('x') 一样将 char 作为 int 传递,它将 return int 的值。