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;
存在从 int
到 char
的隐式自然转换,反之亦然。请注意,您因此在 char
m 上定义了通常的算法,当您想要迭代字母表时,它会非常方便:
for (char c='a' ; c<='z' ; c++) { ... }
但是,请注意 char
的长度为 2 个字节,而 int
的长度为 4 个字节,因此将 int
向下转换为 char
可能会导致整数溢出。
在计算中,一切都是数字!只是位和字节。
int
、char
、byte
、short
和 long
只是数字。 char
只是编译器知道的一个数字,通常用于显示由特定数字表示的字符(例如 32 = space、48 = 零等)。
字符串是数字和其他东西的序列,所以有点复杂。我们不想去那里。
int
是一个四字节数字,而 char
是一个两字节数字,因此您可以在 int
中放入任何 char
数字。
Java 的设计者刚刚决定他们可以让您从 char 转换为 int,而无需任何特殊的转换或转换。
char
不是 int
。但是,它是整型。也就是说,它被认为是一个可以与其他整数类型(long
、short
、byte
和int
)相互转换的整数,根据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
的值。
我正在尝试为 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;
存在从 int
到 char
的隐式自然转换,反之亦然。请注意,您因此在 char
m 上定义了通常的算法,当您想要迭代字母表时,它会非常方便:
for (char c='a' ; c<='z' ; c++) { ... }
但是,请注意 char
的长度为 2 个字节,而 int
的长度为 4 个字节,因此将 int
向下转换为 char
可能会导致整数溢出。
在计算中,一切都是数字!只是位和字节。
int
、char
、byte
、short
和 long
只是数字。 char
只是编译器知道的一个数字,通常用于显示由特定数字表示的字符(例如 32 = space、48 = 零等)。
字符串是数字和其他东西的序列,所以有点复杂。我们不想去那里。
int
是一个四字节数字,而 char
是一个两字节数字,因此您可以在 int
中放入任何 char
数字。
Java 的设计者刚刚决定他们可以让您从 char 转换为 int,而无需任何特殊的转换或转换。
char
不是 int
。但是,它是整型。也就是说,它被认为是一个可以与其他整数类型(long
、short
、byte
和int
)相互转换的整数,根据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, theExpression
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
toint
,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 typeT
zero-extends the representation of thechar
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
的值。