谁能告诉我,为什么要打印“int”,就像在内部工作中一样。
class Test {
void Method(int i) {
System.out.println("int");
}
void Method(String n) {
System.out.println("string");
}
public static void main(String [] a) {
new Test().Method('c');
}
}
谁能告诉我,为什么要打印“int”,就像在内部工作中一样。
class Test {
void Method(int i) {
System.out.println("int");
}
void Method(String n) {
System.out.println("string");
}
public static void main(String [] a) {
new Test().Method('c');
}
}
角色c
被转换为int
. 它不会被强制转换为String
.
更正式地,从JLS §5.5 开始- 扩大转换发生从 achar
到 an int
, long
, float
, or double
。
永远不会被视为 a 的原因String
是 achar
不能自动装箱为 a String
。
'c'
是根据其单引号的字符。作为一个原始的数字(有点)类型,它比字符串更容易转换为整数,因为后者必须是明确的。
您还可以修改Method(int i)
以打印i
和尝试不同的字符。
中的char
实际是数字类型Java
。int
当您进行回调时,它会自动转换为,这就是方法 prints 的原因int
。
从Oracle 教程中,我们可以读到:
char 数据类型是单个 16 位 Unicode 字符。它的最小值为“\u0000”(或 0),最大值为“\uffff”(或 65,535,包括在内)。
传递带单引号的变量被认为是char
. 字符变为int
变量。
如果你想将它作为一个String
简单的使用双引号传递。
new Test().Method("c");
原始类型的特定转换称为扩展原始转换:
字节到 short、int、long、float 或 double
短到 int、long、float 或 double
char 到 int、long、float 或 double
int 到 long、float 或 double
长时间浮动或加倍
浮动加倍
您可以在此处阅读更多信息:JLS §5.1.2
char
是一个原始类型,它被转换为int
,而String
是一个对象。
另一方面,java 中有一个称为自动装箱的功能,其中一些原始类型在适合时(例如int
to Integer
,boolean
to Boolean
)被强制转换为对象,但它不适用于char
. char
自动装箱到Character
.
当您通过'c'
时,它被假定为char
; 如果您尝试通过"c"
,它将被假定为string
.
'c' 是 char 类型而不是字符串。'c' 可以与 (int)'c' 进行比较
在 Java 中,字符表示为数字。具体来说,Java 通过其 Unicode 代码点来表示一个字符。如果我没记错的话,字符 'c' 在 Unicode 规范中是数字 98。
当您调用Method('c')
时,程序有两个方法签名选项:一个是 'c' 是 an int
,另一个是 a String
。因为在内心深处,'c' 是一个数字,它被转换int
为数字 98 并被视为数字。字符不会被转换为Strings
。