在 Java 中转换字符

2024-02-02

我正在学习Java。我发现表达式通常必须转换为某种类型才能正确执行。例如,在算术计算期间,字节被提升为整数,因此以下表达式将引发错误:

byte b = 10;
int i;
i = b*b;  //ok, assigning an integer evaluation to an integer variable
b = b*b;  // throws error, coz assigning integer evaluation to byte variable

现在,我知道将整数分配给字符变量是可以的:char a; a = 88;没关系。但是,如果我这样做:

char c2 = 'b', c3 = 'c';
c2 = c2 + c3; //throws error
c2 = (char)(c2 + c3); //works fine

为什么不强制转换时会抛出错误?毕竟,右侧仍然是整数,因此将整数分配给字符变量应该可以正常工作。


In c2 + c3,两个操作数都隐式扩展为int,所以相加的结果也是int.

JLS §15.18.2。数字类型的加法运算符(+ 和 -) http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.18.2:

对操作数执行二进制数字提升(第 5.6.2 节)。

JLS §5.6.2。二进制数字提升 http://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls-5.6.2:

当运算符将二进制数字提升应用于一对操作数时(每个操作数必须表示可转换为数字类型的值),将按顺序应用以下规则:

加宽原语转换(第 5.1.2 节)适用于按照以下规则指定转换一个或两个操作数:

  • 如果其中一个操作数的类型为 double,则另一个操作数将转换为 double。

  • 否则,如果任一操作数的类型为 float,则另一个操作数将转换为 float。

  • 否则,如果任一操作数的类型为 long,则另一个将转换为 long。

  • 否则,两个操作数都转换为 int 类型。

因此你最终会得到一个int。将其分配给char变量需要显式转换。

You say:

由于整数值可以分配给字符变量......

Only constant整数表达式可以分配给char没有强制转换的变量。

JLS §5.2。分配转换 http://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls-5.2:

此外,如果表达式是 byte、short、char 或 int 类型的常量表达式(第 15.28 节):

  • 如果变量的类型是 byte、short 或 char,并且常量表达式的值可以用变量的类型表示,则可以使用缩小基元转换。

这种自动缩小转换在这里不适用。你需要一个明确的演员表。

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

在 Java 中转换字符 的相关文章

随机推荐

  • 具有断轴和交错颜色条的直方图

    我有这些数据 a b c d e alpha 5 51 0 60 0 12 26 90 76284 53 beta 3 39 0 94 0 17 0 20 0 20 gamma 7 98 3 34 1 41 7 74 28394 93 de
  • AWS RDS实例升级停机时间[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有一些关于升级 RDS 实例的问题 将实例从小到大升级时的停机时间是多少 当您更改任何实例类型 小型 大型 超大 时 停机时间是否相对相
  • Spring boot CrudRepo 定义一个bean

    我在 Spring Boot 中遇到有关存储库的问题 我有一项服务 Service userService public class UserServiceImpl implements UserService Autowired priv
  • YouTube 嵌入:不安全的 JavaScript 尝试访问框架

    我们有一个 Wicket 应用程序 其页面包含嵌入的 Youtube 视频 视频嵌入并播放得很好 但显然它导致页面的其余部分无法渲染 似乎 DOM 元素来了after尽管嵌入在标记中 但嵌入根本不会显示在页面上 查看 Chrome 中的错误
  • 如何使用窗口标题启动powershell?

    我有一个批处理文件 允许我根据我的输入转到特定文件夹 d cd d test bits ECHO off cls start ECHO ECHO 1 Perl ECHO 2 Python set choice set p choice ty
  • Firebase 从 vagrant localhost:5000 提供服务

    我在 mac os high Sierra 上运行 vagrant ubuntu 16 04 我已将端口转发和符号链接设置为awesome local com 基本的node js Web应用程序运行完美 可以在指向awesome loca
  • 如何从 IntelliJ 中删除通过 pom.xml 添加的依赖项?

    我将 Spring Security 添加到 pom xml 和 IntelliJ IDEA 中的依赖项中 然后下载它 我检查了 http localhost 8080 并重定向到 http localhost 8080 login 我现在
  • Java支付网关库[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找类似于 Rails active merchant 的 Java 支付网关库或许多其他平台上可
  • Node.js 续集关联,包含条件

    是否可以在 findAll 查询的包含数组中传递条件 例如 我有 UsersModel PostsModel 和 UserVotesModel 用户可以对帖子进行投票 对于登录用户 我想查询帖子并仅包含当前用户的投票 我无法使用 Seque
  • 在Notepad++中选择换行符

    我注意到 当我加载文本文件时 Notepad 将识别并使用该文件中的任何换行符 n or r n 是否有一些选项可以让我选择默认情况下用于新文档的选项 我查看了帮助并用谷歌搜索 但找不到任何东西 对于任何新文档 Settings gt Pr
  • 如何用MySQL生成随机字符并插入? [复制]

    这个问题在这里已经有答案了 复制 向 MYSQL 数据库插入随机字符 https stackoverflow com questions 2498310 inserting random characters to mysql databa
  • Django Apache/mod_python 管理 CSS 未与管理表一起出现

    我的 Windows XP Django apache mod python 在本地主机上运行 除了管理 CSS 不渲染之外 所有部分都正常工作 管理员可以工作 但没有 html 格式 我做了补充 settings py INSTALLED
  • 字符串内容相同,但 equals 方法返回 false

    我正在使用 StringEscapeUtils 来转义和取消转义 html 我有以下代码 import org apache commons lang StringEscapeUtils public class EscapeUtils p
  • 如何将二进制数据“按原样”写入注册表(即:我仅将可见的二进制数据作为来自注册表编辑器的字符串)

    我一直在谷歌上搜索这个问题 一整天都没有找到可行的解决方案 我对二进制数据类型一无所知 因为我从来没有故意使用过它们 并且我正在尝试将我在注册表中看到的二进制值写入注册表 现在 我看到的只是以下内容 如下所示 如果我尝试将其作为字符串传递给
  • 如何合并二进制文件?

    我的my branch中有一个二进制文件 当我需要对其进行更改时 git当然不会合并它 所以我现在做的是 git checkout my branch make a change to gui bin mv gui bin git comm
  • k3d 尝试拉取 Docker 镜像而不是使用本地镜像

    只需在本地机器 Linux Mint 20 2 上研究K8S的核心即可 使用以下命令在本地创建一个节点集群 k3d集群创建mycluster 现在我想在容器中运行 spring boot 应用程序 我构建本地图像 库 0 1 0 这是摘自D
  • 如何摆脱 jQuery 数据表插件的分页?

    我怎样才能删除分页 and showjQuery 的特点数据表 http datatables net 我只想要它的搜索和排序功能 并想摆脱其他功能 有什么办法吗 如果你不使用 jQuery UI 主题 你可以这样做 document re
  • 如何删除Android Room数据库的文件?

    我已经实现了一个房间数据库 它是从资源文件中分发的SQLite资产助手 https github com jgilfelt android sqlite asset helper第一次启动应用程序时 数据库包含游戏状态数据 因此如果玩家想要
  • 如何生成字母表数组?

    在 Ruby 中我可以做 a z to a to get a b c d z JavaScript 是否提供类似的构造 我个人认为最好的是 alphabet abcdefghijklmnopqrstuvwxyz split 简洁 有效 易读
  • 在 Java 中转换字符

    我正在学习Java 我发现表达式通常必须转换为某种类型才能正确执行 例如 在算术计算期间 字节被提升为整数 因此以下表达式将引发错误 byte b 10 int i i b b ok assigning an integer evaluat