谁能告诉我,为什么要打印“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 中有一个称为自动装箱的功能,其中一些原始类型在适合时(例如intto Integer,booleanto 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。