我想知道为什么每当计算表达式或处理位操作时,byte
和short
值都会被提升为int
?
因为Java语言规范是这么说的。第5.6.1节为某些运算符的引出定义了一元数字提升,它说:
第5.6.2节关于二进制数字运算符的计算(“二进制”是指有两个操作数的运算符,如“+”)有类似的内容:
因此,在Java的设计中,较小的类型通常被视为二等公民,在不同的步骤中转换为int,因为这简化了一些事情。较小的类型仍然很重要,因为它们在打包在一起(例如,在数组中)时占用较少的内存,但它们在计算表达式时没有帮助。
问题内容: 我想知道为什么在计算表达式或按位运算时将和提升为值的原因? 问题答案: 因为Java语言规范是这样说的。第5.6.1节定义了用于撤消某些运算符的一元数值提升,并指出: 如果操作数的编译时类型为byte,short或char,则通过扩展基元转换(第5.1.2节)将其提升为int类型的值。 关于二进制数值运算符(“ binary”表示具有两个操作数,如“ +”的运算符)的评估的第5.6.2
示例:类中的字段使用。 如果差异太小,那么为什么这些数据类型(、)会存在呢?
PEP 572引入了为Python 3.8实现的赋值表达式(俗称Walrus操作符)。这似乎是一个非常重要的新特性,因为它将允许在理解和lambda函数中进行这种形式的赋值。 赋值表达式的语法、语义学和语法规范到底是什么? 为什么在PEP 379中关于“添加赋值表达式”的类似想法之前遭到拒绝的情况下,引入了这个新的(似乎相当激进的概念)?
如果我编译以下代码: 我得到的结果是105.0,但将摄氏转换为双倍得到的正确结果是105.8 为什么我要投?
在以下代码中(在本地和Wandbox上测试): MSVC 15.8.5编译失败: (全部指包含的行) Clang 8(HEAD)报告: gcc 9(负责人)报告: 为什么? 首先,它们显然都认为enum-id是非常数,尽管它们显然实际上是众所周知的编译时常数值。 其次,MSVC抱怨读取超出生存期,但的生存期及其值应在中的整个使用过程中延长。 第三,gcc有一个奇怪的const-vs非const抱怨
问题内容: 为什么这段代码会打印int? 问题答案: 因为在Java 1.0版中向上广播到,而在5.0版中添加了自动装箱。更改行为将破坏为较旧版本的Java编写的代码。 但是,这样的混合类型表明您的设计存在问题,这只是您将在拼图游戏中找到的。;)