4

谁能告诉我,为什么要打印“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');
    }

}
4

8 回答 8

9

角色c被转换为int. 它不会被强制转换为String.

更正式地,从JLS §5.5 开始- 扩大转换发生从 achar到 an int, long, float, or double

永远不会被视为 a 的原因String是 achar不能自动装箱为 a String

于 2013-07-09T13:48:40.833 回答
1

'c'是根据其单引号的字符。作为一个原始的数字(有点)类型,它比字符串更容易转换为整数,因为后者必须是明确的。

您还可以修改Method(int i)以打印i和尝试不同的字符。

于 2013-07-09T13:48:59.543 回答
1

中的char实际是数字类型Javaint当您进行回调时,它会自动转换为,这就是方法 prints 的原因int

Oracle 教程中,我们可以读到:

char 数据类型是单个 16 位 Unicode 字符。它的最小值为“\u0000”(或 0),最大值为“\uffff”(或 65,535,包括在内)。

于 2013-07-09T13:49:30.950 回答
1

传递带单引号的变量被认为是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

于 2013-07-09T13:51:48.383 回答
0

char是一个原始类型,它被转换为int,而String是一个对象

另一方面,java 中有一个称为自动装箱的功能,其中一些原始类型在适合时(例如intto Integerbooleanto Boolean)被强制转换为对象,但它不适用于char. char自动装箱到Character.

于 2013-07-09T13:49:15.323 回答
0

当您通过'c'时,它被假定为char; 如果您尝试通过"c",它将被假定为string.

于 2013-07-09T13:50:01.783 回答
0

'c' 是 char 类型而不是字符串。'c' 可以与 (int)'c' 进行比较

于 2013-07-09T13:50:02.683 回答
0

在 Java 中,字符表示为数字。具体来说,Java 通过其 Unicode 代码点来表示一个字符。如果我没记错的话,字符 'c' 在 Unicode 规范中是数字 98。

当您调用Method('c')时,程序有两个方法签名选项:一个是 'c' 是 an int,另一个是 a String。因为在内心深处,'c' 是一个数字,它被转换int为数字 98 并被视为数字。字符不会被转换为Strings

于 2013-07-09T13:58:56.713 回答