栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

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

int foo() { return 'a'  };long foo() { return 3;  }

但是您不能:

char foo() { return 1;  }int foo() { return 1L;  }

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

碰巧的是,当创建Java时,Unipre仅定义了适合16位的代码点。因此,它

char
被创建为2字节的无符号原始类型(这是Java中唯一的无符号原始类型),与当时所谓的UCS-2字符编码(编码和代码点之间的1到1映射)相匹配。

但是,此后,Unipre变得“宽泛”,并且出现了BMP之外的代码点(即大于U +
FFFF)。从那时起,UCS-2变成UTF-16,并且BMP之外的

char
代码点对于一个代码点需要2
s(一个前导代理和一个尾随代理;在以前的Unipre版本和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 prepoint = inputString.prePoints().findFirst();    System.out.println(prepoint.isPresent() ? prepoint.get() : -1);}

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



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/495263.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号