java - 将超出范围的 int 转换为 char。精度损失真的是一个问号吗?

标签 java casting char

我的脑袋卡在了 SCJP 6 学习指南上,对他们在这里提出的观点感到困惑。

关于将 int 转换为 char,他们说以下内容是完全合法的,但会损失精度(我完全可以理解):

    char d = (char)-98;
    char c = (char)70000;
    System.out.println("d = " + d + " c = " + c);

结果是:

d = ? c = ?

这里让我感到困惑的一点是,在这两种情况下,生成的 char 值都作为问号打印出来。我本来期望一个无意义的数值,可能与原始值几乎没有关系或根本没有关系,但仍然是数字。

为什么结果是问号?我不明白这里的问号是“精度损失”吗?

我在 SO 上查看了许多与 char 相关的问题,也用 google 搜索了很多,但找不到答案。

它与其他 JVM 有何不同?还是对所有超出范围的字符转换的标准响应?

最佳答案

当您将 char 附加到 String 时,附加的是 char(例如“a”),而不是它的数值(例如 97)。如果你想知道 char 的数值是多少,使用

System.out.println("d = " + ((int) d) + " c = " + ((int) c));

关于java - 将超出范围的 int 转换为 char。精度损失真的是一个问号吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13221158/

相关文章:

c# 无需复制和迭代即可将数组类型转换为另一种数组类型

C++:+ 或 - 可以告诉编译器一个值应该是一个 int 吗?

c++在win32学校应用程序上构建错误

java - Java Swing 的错误消息

java - 如何删除 Toolbar 和 RelativeLayout 之间的分隔符

C++ 语法 : Using a typedef to typecast

Java的转换和C++的转换

c - 当将 char 数组用作字节数组并分配给 char 指针时,如何获取 char 数组长度?

Java JNI : How to load library multiple times?

java - 如何从 Java 启动 Eclipse 命令?