6

我试图为班级完成一些代码:

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

由于我最终可能无法返回任何东西,它告诉我最后这样做:

return value;

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

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

4

7 回答 7

7

Java语言规范声明

当带有 的 return 语句Expression出现在方法声明中时,Expression必须可分配(第 5.2 节)到方法的声明返回类型,否则会发生编译时错误。

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

赋值上下文允许使用以下之一:

原始类型的 19 种特定转换称为扩展原始类型转换:

  • charint, long, float, 或 `double

最后

在以下情况下,加宽基元转换不会丢失有关数值整体大小的信息,其中数值被精确保留:[...]

achar到整数类型的扩大转换T零扩展char值的表示以填充更宽的格式。

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

于 2015-06-08T20:06:00.127 回答
2

Achar小于 a int,因此您可以返回它,它会在前面添加零以生成更长的数字。这不是返回的正确方法-在您的情况下,我可能会抛出异常;但是,编辑建议它,因为它是您可以退回的东西,并且您需要退回一些东西。

以下代码是合法的:

char c = 'h';
int i = c;
于 2015-06-08T19:58:19.183 回答
2

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

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

String 是一系列数字和其他东西,所以有点复杂。我们不想去那里。

Anint是一个四字节的数字,achar是一个两字节的数字,因此您可以将任何char数字放入int.

Java 的设计者刚刚决定让您从 char 转换为 int,而不需要任何特殊的强制转换或转换。

于 2015-06-08T20:02:30.567 回答
2

Achar不是int. 但是,它是一个整数类型。也就是说,根据Java 语言规范,它被认为是可以与其他整数类型( 、 和 )相互转换long的整数。shortbyteint

基本上这意味着它与int. 它的值介于 0 和 65535 之间,如果将其分配给 anint或将其强制转换为 anint并打印,您将获得它所代表的字符的 UTF-16 值。

于 2015-06-08T20:03:17.023 回答
1

int从to有一种隐含和自然的转换,char反之亦然。请注意,您因此在charm 上定义了通常的算术,当您想要迭代字母表时非常方便:

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

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

于 2015-06-08T19:59:34.397 回答
1

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

一个 32 位有符号整数的 int。(-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,反之亦然

于 2015-06-08T20:07:01.547 回答
-2

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

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

如果您char作为intlike传递getValue('x'),它将返回int.

于 2015-06-08T20:09:42.957 回答