求和常量时的隐式缩小与求和变量时的显式缩小

2023-12-07

我写了一个程序。

class First
{
        public static void main(String[] args)
        {
                int c = 5;
                byte b = c+6;
                System.out.println(b);
        }
}

我的 javac 输出是:

error: incompatible types: possible lossy conversion from int to byte
        byte b = c+6;
                  ^
1 error

但如果我将程序修改为:

class First
{
        public static void main(String[] args)
        {
                byte b = 5+6;
                System.out.println(b);
        }
}

它执行得很好,输出:

11

我知道在运算之前,两个操作数都会转换为整数。然后 + 运算符产生一个整数。但如果变量 c 是整数,则常量 5 默认也是整数。为什么在第二种情况下 javac 不会产生错误?

如果我在概念上错误,请指导我。


根据第 5.2 节JLS 的:

常量表达式的编译时缩小意味着诸如以下的代码:

字节答案 = 42; 被允许。如果没有缩小范围,整数文字 42 具有 int 类型这一事实意味着需要强制转换为 byte:

字节答案 = (字节)42; // 允许强制转换,但不是必需的

常量表达式进一步定义在第 15.28 条JLS 的。

既然表达了5+6是一个常量表达式,其范围为byte,它会在编译时自动缩小,而不需要显式转换。另一方面,由于表达式c+6不是常量表达式,它不会自动缩小范围,并且需要显式强制转换。

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

求和常量时的隐式缩小与求和变量时的显式缩小 的相关文章

随机推荐

  • Laravel Pusher array_merge:期望参数 2 是一个数组,给定 null

    我正在按照 Pusher 的教程在网站上显示通知 一切都符合教程 但是当我尝试访问通知时 出现了这个特定的错误localhost 8000 test我不知道如何解决它 错误信息 预期结果 通知发送消息 输出 array merge 错误 相
  • SQL 视图中的动态架构名称

    我有两个数据集 一个是关于狗的数据 我的数据 第二个是匹配键的查找表 我无法控制这些数据 匹配的键定期更新 我想创建 Dog 数据集的视图 或实现相同目的的东西 它总是连接最近的匹配的键 此外 我需要能够内联引用它 就好像它是一张桌子一样
  • 请求期间出现意外异常

    我在用着apache cassandra 2 2 4 我有一个 4 四 节点集群 DC1 中的复制因子为 3 DC2 中的复制因子 1 其中 DC1 包含 3 三 个节点 DC2 包含 1 一 个节点 该集群中之前还有一些节点 但由于某种原
  • 使用SAF(存储访问框架)的Android SD卡写入权限

    经过大量关于如何在 SD 卡 android 5 及更高版本 中写入 和重命名 文件的发现后 我认为 android 提供的新 SAF 将需要获得用户的许可才能写入 SD 卡文件 我在这个文件管理器应用程序中看到ES文件浏览器最初它会按照以
  • 监视调用 Jest 中另一个函数的导入函数

    我试图监视由另一个函数调用的函数 这两个函数都驻留在外部文件中并导入 Funcs spec js import as Funcs from Funcs describe funcA gt it calls funcB gt jest spy
  • 如何制作这样的回归树?

    我想制作一棵如图所示的回归树 这棵树是用 Cubist 完成的 但我没有那个程序 我确实使用 R 和 Python 它似乎与 R 包 rpart 或 tree 不同 因为末端节点是线性公式而不仅仅是平均值 有什么办法可以使用 R 或其他一些
  • ASP.NET LinkBut​​ton OnClick 事件在主页上不起作用

    我有一个用户控件来处理用户登录到我的网站的情况 该用户控件作为快速登录框放置在所有页面的右上角 我遇到的问题是 在我的生产服务器上 我为登录和重置提供的 LinkBut ton 单击事件在回发后不会触发 OnClick 事件 就像它只是忘记
  • 使用 python 正则表达式删除括号之间的内容

    我有一个文本文件 例如 a abc b c d 我想删除这些括号之间的内容 and 所以输出应该是 abc 我删除了括号之间的内容 但无法删除这之间的内容 我试过下面的代码 import re with open data txt as f
  • Mac 上的 VBA (Excel) 词典?

    我有一个 Excel VBA 项目 该项目大量使用 Windows 脚本字典对象 我最近有一位用户尝试在 Mac 上使用它并收到以下错误 Compile Error Can t find project or library 这是使用的结果
  • 在网页上加载 javascript 时输入意外结束

    我的 输入意外结束 的情况与我迄今为止在 SO 和其他论坛中发现的所有情况有所不同 坦白说 我被困住了 我在 CentOS 机器上安装了 JBoss EAP 6 4 尝试在 Windows 7 机器上打开管理控制台 MS 的所有最新补丁 都
  • 为什么 emplace_back() 会有这样的行为?

    为什么 Base 在调用 emplace back 之后立即被调用 为什么在析构函数调用后可以访问 sayHello 为什么 Base 再次被调用 include
  • IE11 Selenium WebDriverException:无法导航。 (org.openqa.selenium.WebDriverException ...IWebBrowser2::Navigate2() 失败

    我是自动化测试新手 虽然我的 Selenium 测试在 Chrome 和 Firefox 上运行 但它们没有在 IE11 上运行 我做了下面详细说明的所有检查 但我不断遇到此错误 org openqa selenium WebDriverE
  • 如何一次只打开 1 个手风琴

    accordion on click accordion control function e e preventDefault this next accordion panel not animated slideToggle ul c
  • 将 SMB 添加到 Windows,这有多安全?

    我遇到了一个小黑客 它声称它可以在 Windows 上启用 smb 抱怨是这样的事情 a href text a 没工作 虽然您确实可以在 url 中使用 file 但用户希望使用 smb 以便它是跨平台的 黑客攻击的过程如下 1 创建这个
  • MySQL IFNULL“N/A”产生“在集合中找不到项目”错误

    我一直在使用 ISNULL 函数在 mySQL 查询中将 NULL 值转换为零 如下所示 SELECT IFNULL mem comment count 0 FROM members 这很好用 我现在尝试使用 IFNULL 函数将 NULL
  • 使用 Python gtk3 在 X 上进行全局键绑定

    我正在寻找一些可以与 gtk3 一起使用的 python xlib 全局键绑定示例 就像为 gtk2 所做的那样http www siafoo net snippet 239 这里的代码非常相似 from Xlib display impo
  • 如何添加NodeJs、S3、heroku直接上传到android?

    我试图了解如何将他们提供示例的方式从网站转换为 android retrofit 这是该网站的代码示例 function get signed request file var xhr new XMLHttpRequest xhr open
  • 多个子进程在同一管道上读/写

    我目前正在Linux环境中使用C语言学习套接字编程 作为一个项目 我试图编写一个基本的聊天服务器和客户端 目的是让服务器为每个连接的客户端分叉一个进程 我遇到的问题是读取一个孩子的数据并将其写入所有连接的客户端 我尝试通过在子级中循环调用
  • 是否可以在 ES6 Set 实例上使用数组迭代方法?

    我正在使用 ES6 Set 实例 我需要对它们应用一些转换 如果它们是数组的话 这些转换就会很简单 这是一个例子 let s new Set s add 1 s add 2 s add 3 let n s filter val gt val
  • 求和常量时的隐式缩小与求和变量时的显式缩小

    我写了一个程序 class First public static void main String args int c 5 byte b c 6 System out println b 我的 javac 输出是 error incom