我试图为课程完成一些代码:
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
吗?为什么会这样?
答案 0 :(得分:7)
当方法中出现带
Expression
的返回语句时 声明,Expression
必须 be assignable (§5.2)声明 方法的返回类型,或发生编译时错误。
其中规定一个值是否可赋予另一个值的规则定义为
分配上下文允许使用以下之一:
和
对原始类型的19个特定转换称为扩展 原始转换:
char
至int
,long
,float
或`double
最后
扩展的原始转换不会丢失有关的信息 在下列情况下,数值的整体幅度,其中 数值完全保留:[...]
将
char
的扩展转换为整数类型T
零扩展 表示char
值以填充更宽的格式。
简而言之,作为char
语句的表达式的return
值可通过扩展原语转换分配给返回类型int
。
答案 1 :(得分:2)
char
小于int
,因此您可以将其返回,并且它将添加零以生成更长的数字。这不是正确的回报 - 在你的情况下,我可能会抛出异常;然而,编辑建议它,因为它是允许返回的东西,你需要返回一些东西。
以下代码是合法的:
char c = 'h';
int i = c;
答案 2 :(得分:2)
在计算中,一切都是数字!只是位和字节。
int
,char
,byte
,short
和long
只是数字。 char
只是编译器知道的数字,通常用于显示由特定数字表示的字符(例如32 =空格,48 = 0等)。
字符串是一系列数字和其他东西,所以有点复杂。我们不想去那里。
int
是一个四字节数字,char
是一个双字节数字,因此您可以在char
中填入int
个数字。
Java的设计者刚刚决定让他们从char转换为int而不需要任何特殊的演员或转换。
答案 3 :(得分:2)
char
不是int
。但是,它是整数类型。也就是说,它被认为是一个整数,可以转换为其他整数类型(long
,short
,byte
和int
)。 Java Language Specification。
基本上这意味着它与int
分配兼容。它的值介于0到65535之间,如果您将其分配给int
或将其转换为int
并打印它,您将获得它所代表的字符的UTF-16值。 / p>
答案 4 :(得分:1)
从int
到char
存在隐式和自然转换,反之亦然。请注意,您因此在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
的值。