为什么int类型方法允许字符类型作为返回值?

这是我的代码,但是我没有得到int getValue()方法如何接受char类型作为返回值。如何运作?谁能解释一下这种方法的工作原理?

public class CharToInteger {

private static Scanner input;

public static int getValue(char character){

return character;

}

public static void main(String[] args) {

input = new Scanner(System.in);

System.out.println("Enter a character to get value of it:");

String inputString=(String) input.next();

char inputCharacter=inputString.charAt(0);

System.out.println(getValue(inputCharacter));

}

}

提前致谢 :)

回答:

好的,所以首先要做的是:

这是一个不断扩大的原始类型转换,因此这是合法的。您可以:

int foo() { return 'a' /* character constant */ };

long foo() { return 3; /* int constant */ }

但是您不能:

char foo() { return 1; /* int constant */ }

int foo() { return 1L; /* long constant */ }

第二:它返回的根本不是ASCII码。Java执行Unicode。

碰巧的是,当创建Java时,Unicode仅定义了适合16位的代码点。因此,它char被创建为2字节的无符号原始类型(这是Java中唯一的无符号原始类型),与当时所谓的UCS-2字符编码(编码和代码点之间的1到1映射)相匹配。

但是,此后,Unicode变得“宽泛”,并且出现了BMP之外的代码点(即大于U +

FFFF)。从那时起,UCS-2变成UTF-16,并且BMP之外的char代码点对于一个代码点需要2

s(一个前导代理和一个尾随代理;在以前的Unicode版本和Java API中,这些分别称为resp.high和低代理)。char因此,A

现在是UTF-16代码单元。

但是,对于BMP char中的代码点,该值与该代码点完全匹配,这仍然是正确的。


现在,为了“修复”程序以准确显示每个可能条目的“字符值”(即代码点),您可以这样做(Java 8):

public static void main(String[] args) {

final Scanner input = new Scanner(System.in);

System.out.println("Enter a character to get value of it:");

String inputString = input.next();

// Print -1 on an empty input

final OptionalInt codepoint = inputString.codePoints().findFirst();

System.out.println(codepoint.isPresent() ? codepoint.get() : -1);

}

这还将处理BMP之外的代码点。

以上是 为什么int类型方法允许字符类型作为返回值? 的全部内容, 来源链接: utcz.com/qa/398237.html

回到顶部