【问题标题】:How integer automatically convert char into ASCII value?整数如何自动将 char 转换为 ASCII 值?
【发布时间】:2017-12-23 01:22:18
【问题描述】:

当我在做 Integert.valueOf('a') 它返回 97,即 char a 的 ASCII 值。

我想知道valueOf方法中char什么时候转换成ascii值?

【问题讨论】:

  • 内部使用 parseInt
  • 严格来说,它没有被转换。 ASCII 是一种字符编码标准,它本质上将一组字符映射到数字。 Java VM 有这张地图,一侧是整数,另一侧是字符。
  • @marekful 你能否解释一下,因为我看到它正在工作,因为 parseInt 方法正在内部调用。

标签: java char integer ascii


【解决方案1】:

发生在你身上的是内部类型转换。

所以你的代码相当于这个:

char a = 'a';
int aint = (int)a;
Integer aInteger = Integer.valueOf(aint);
System.out.println(aInteger.toString());

引用oracle java教程:https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

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

所以变量 a 持有字符 'a' (97) 的 unicode 等价物

然后发生的是扩大操作 https://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html

5.1.2。扩大基元转换

[...]

将 char 扩展为整数类型 T 会将 char 值的表示形式零扩展以填充更宽的格式。

因此您的 char(16 位)将扩展为 int(32 位)。

那个 int 就是输入到 Integer.valueOf() 中的东西

希望能回答您的问题。

托比

【讨论】:

    【解决方案2】:

    char 是数字类型。您正在调用Integer.valueOf(int i) 方法,该方法采用intchar 通过零扩展从 16 位提升到 32 位,并将该值传递给 valueOf 方法。

    请注意,这里几乎肯定不涉及 ASCII。大多数 Java 编译器,如 Oracle javac 参考编译器,在解析源代码时将使用平台默认字符集,如 Windows-1252,而 Java 在内部使用 Unicode。但是,ASCII 是这两个字符集的子集,Unicode 代码点 97 LATIN SMALL LETTER A 是这三个字符集的共同点。

    我意识到将代码点称为“ASCII 值”是很常见的,但如果人们试图谈论例如希腊字母的“ASCII 值”,这可能会导致混淆。除非您实际上是在谈论 US-ASCII 字符集,否则最好说“代码点”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-22
      • 2013-10-29
      • 2014-10-10
      • 2014-03-31
      • 1970-01-01
      相关资源
      最近更新 更多