为什么 Java 中允许将 double 转换为 char?

2023-11-23

Why is char c = (char)65.8;Java 中允许吗?

既然这样它不应该抛出错误吗65.8不是一个精确的 Unicode 值?我知道双精度数被截断为整数,在这种情况下,65,但对我来说允许程序员进行这样的转换似乎是糟糕的设计。


它被称作缩小型铸造. From oracle docs:

原始类型的 22 种特定转换称为窄化 原始转换:

短到字节或字符

字符到字节或短字符

int 到 byte、short 或 char

long 到 byte、short、char 或 int

float 到 byte、short、char、int 或 long

double 到 byte、short、char、int、long 或 float

缩小原始转换可能会丢失有关 数值的总体大小,也可能会失去精度和 范围。

在Java中,有两种基本类型的类型转换:widening and 缩小.

A widening conversion当您从较小(或更窄)范围的类型转换为更大(或更宽)范围的类型时,会发生这种情况。因此,不会有数据丢失的机会,并且会考虑转换"safe."

A narrowing conversion当您从较大(或更宽)范围的类型转换为较小(或更窄)范围的类型时,会发生这种情况。由于我们正在缩小范围,因此有可能会丢失数据,因此考虑进行此转换"unsafe"

narrowing type conversion

转换自byte to char是一个特例,代表widening and 缩小同时。转换从转换开始byte to an int然后是int被转换为char.

我能想到为什么缩小类型转换不会导致错误/异常的原因之一是在没有数据丢失的情况下允许方便/简单/快速的类型转换。编译器将其留给我们来确保转换后的数据能够适应较小的范围。如果我们想要快速截断值(例如舍入 a 的值),它也很有用double(通过将其类型转换为int).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 Java 中允许将 double 转换为 char? 的相关文章

随机推荐

  • 我可以对 JScript (.js) 或 VBScript (.vbs) 文件进行数字签名吗?

    我知道可以签署 Windowsbinary可执行文件使用signtool 所以一直以来我都假设人们无法签署由Windows Script Host 例如 JScript js 或 VBScript vbs 因为它们只是文本文件 但今天 在打
  • 使用 preg_match 查找所有 PHP 变量

    如何找到所有 PHP 变量preg match 我制作了以下正则表达式 string Hallo var blabla var iam a var varvarvar gfg djf jdfgjh fd variable instring
  • 使用 Swift 制作可点击的 UILabel

    我想将特定单词设置为可点击UILabel使用 Swift 编写文本 是否可以 如果这里有多个标签 我如何检测按下的是哪个单词 你不能用简单的标签来做 github上有可用的库 https github com TTTAttributedLa
  • 如何检查时间偏移是否处于夏令时?

    我使用的 CMS 允许我访问用户相对于 UTC GMT 时间的时间偏移 因此 如果用户将时区设置为 EST 则此偏移量将为 5 当我需要显示当前时间时 我现在正在做的事情是这样的 date M j Y h i A time offset 3
  • 如何确定 iOS 上的设置何时更改

    我使用标准创建了一个自定义 Settings app 捆绑包root plistiPhone 的方法 我想知道是否有一种方法可以确定用户何时更改我的应用程序中的这些设置 您可以使用以下命令监听 NSUSerDefaults DidChang
  • 如何更改特定元素(而不是全局元素)的 TextBox 占位符文本颜色

    MSDN 列出了TextBox class here 我可以通过创建一个来覆盖这些主题资源ResourceDictionary in App xaml像这样
  • 从 Angular 5 升级到 Angular 7 后,找不到“AppModule”的 NgModule 元数据

    我们的开发团队最近将 Angular 5 项目更新为 Angular 7 我已经下载了该存储库并且正在尝试构建源代码 但是当我运行ng build命令我得到一个找不到 AppModule 的 NgModule 元数据时出现错误 如果我运行n
  • 将焦点转移到特定领域

    我有一个按钮 可以在页面上添加显示表单 单击该按钮时如何将焦点移动到表单的第一个字段 简单的例子 HTML
  • 保存和恢复 shell 变量

    我有两个 shell 脚本 我想从 C 程序调用它们 我希望第一个脚本中设置的 shell 变量在第二个脚本中可见 它看起来像这样 a sh var blah
  • C++ 创建数组

    为什么我不能做这样的事情 int size menu size int list size 有没有办法不使用向量来解决这个问题 数组更快 所以我想使用数组 thanks 大小必须在编译时已知 因为编译器需要知道多少堆栈空间需要为其分配足够的
  • 获取系统 ping 的输出而不打印到控制台

    我想打电话ping从 Python 中获取输出 我尝试了以下方法 response os system ping c 但是 这会打印到控制台 这是我不想要的 PING 10 10 0 100 10 10 0 100 56 86 bytes
  • Microsoft Sync Framework 与 Nhibernate TooManyRowsAffectedException 冲突

    我们正在尝试将 Microsoft Sync Framework 实现到我们的应用程序中 使用 NHibernate 保留其域 我们遇到的问题之一是 在 Sync Framework 更改了您的初始数据库结构 添加影子表和触发器 后 当您尝
  • 在redis中存储带有过期前缀的键

    尝试使用键前缀存储过期 x 时间的值 我正在使用redis 我目前正在使用 hset 存储值 import redis r redis StrictRedis localhost for i in range 10 r hset name
  • pthread条件和进程终止

    我有一个进程共享 pthread 条件 带有关联的互斥体 如果在此条件下等待的进程 使用 pthread cond wait 或 pthread cond timedwait 被终止 会发生什么 这个条件还能被其他进程使用吗 在我的场景中
  • 让用户指定服务在哪个帐户中运行

    我有一个应该在域帐户下运行的 Windows 服务由用户在安装时指定 这怎么可能 Wix安装程序 即要求用户提供服务应使用的帐户 密码 背景 我的服务需要访问网络共享并且LocalSystem没有适当的权限 因此我想使用现有的域用户帐户 服
  • 通配符可按精确扩展名获取文件

    在诊断需要循环文件的较大批处理脚本时 log扩展我发现了一个有趣的行为 在包含如下文件的示例目录中 bar log foo log foo log ignore foo log log 1676521099 not related 我的小测
  • START TRANSACTION 在 BEGIN ... END 上下文中或在 and LOOP 语法之外

    我有两个关于 MySQL 中的复合语句和事务的问题 FIRST MySQL手册中有两处注释 Note 在所有存储的程序中 解析器将 BEGIN WORK 视为 BEGIN END 块的开头 在此开始交易 上下文 请使用 START TRAN
  • Android - 使用 JSOUP 解析 JS 生成的 url

    我试图解析由 Bootstrap s Bootpage js 生成的 url 它看起来像https example com page 2但 JSOUP 无法解析它并显示主 url 如何从 Bootpage 获取正常链接或如何使 JSOUP
  • 由于迁移到 java 1.7 Xml 文档元素不会缩进

    我正在尝试缩进由 Transformer 生成的 XML 除了第一个节点 文档元素之外 所有 DOM 节点都按预期缩进 文档元素不另起一行 只是在 XML 声明之后连接 当我迁移到 java 1 7 时 会出现此错误 而使用 java 1
  • 为什么 Java 中允许将 double 转换为 char?

    Why is char c char 65 8 Java 中允许吗 既然这样它不应该抛出错误吗65 8不是一个精确的 Unicode 值 我知道双精度数被截断为整数 在这种情况下 65 但对我来说允许程序员进行这样的转换似乎是糟糕的设计 它