Java char也是一个int?

时间:2015-06-08 19:54:15

标签: java type-conversion equivalence

我试图为课程完成一些代码:

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

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

return value;

这让我很吃惊,因为该方法的返回类型是int类型。然而,它告诉我要归还char!我使用eclipse,并习惯了无数的警告和东西,这是一个重大的惊喜。

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

7 个答案:

答案 0 :(得分:7)

Java Language Specification

  

当方法中出现带Expression的返回语句时   声明,Expression必须 be assignable (§5.2)声明   方法的返回类型,或发生编译时错误。

其中规定一个值是否可赋予另一个值的规则定义为

  

分配上下文允许使用以下之一:

     

  

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

     
      
  • charintlongfloat或`double
  •   

最后

  

扩展的原始转换不会丢失有关的信息   在下列情况下,数值的整体幅度,其中   数值完全保留:[...]

     

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

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

答案 1 :(得分:2)

char小于int,因此您可以将其返回,并且它将添加零以生成更长的数字。这不是正确的回报 - 在你的情况下,我可能会抛出异常;然而,编辑建议它,因为它是允许返回的东西,你需要返回一些东西。

以下代码是合法的:

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

答案 2 :(得分:2)

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

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

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

int是一个四字节数字,char是一个双字节数字,因此您可以在char中填入int个数字。

Java的设计者刚刚决定让他们从char转换为int而不需要任何特殊的演员或转换。

答案 3 :(得分:2)

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

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

答案 4 :(得分:1)

intchar存在隐式和自然转换,反之亦然。请注意,您因此在char m上定义了通常的算术,当您需要时,非常方便,让我们说,迭代字母表:

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

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

答案 5 :(得分: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 autoboxing将char转换为int,反之亦然

答案 6 :(得分:-2)

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

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

如果您将char作为int getValue('x')传递,则会返回int的值。