【发布时间】:2011-02-26 11:06:09
【问题描述】:
自从我开始使用 Java 以来,它不支持从数字类型到布尔值的隐式转换,这让我非常恼火,所以你不能这样做:
if (flags & 0x80) { ... }
相反,您必须经历这种疯狂:
if ((flags & 0x80) != 0) { ... }
null 和对象也是如此。我知道的所有其他类 C 语言包括 JavaScript 都允许它,所以我认为 Java 只是愚蠢的,但我刚刚发现 C# 是相同的(至少对于数字,不知道 null/objects): http://msdn.microsoft.com/en-us/library/c8f5xwh7(VS.71).aspx
Microsoft 故意从 C++ 更改它,那为什么呢?显然我错过了一些东西。为什么要改变(我认为是)世界上最自然的事情来延长打字时间?这到底是怎么回事?
【问题讨论】:
-
这不是疯子,只是不习惯。
-
if (status = CODE_RED) launch_nuclear_missiles(); -
真正的问题是,为什么像 C 这样的语言允许将隐式转换为布尔值的疯狂:)
-
这是一个功能,而不是一个错误。
-
为什么隐式转换应该是默认值?
flags & 0x80与true和false的逻辑概念无关,只是因为true在一些 系统上恰好被表示为非零数字。就像声明字符串"0"也应该代表false一样是错误的。另一方面,(flags & 0x80) != 0现在是一个有意义的布尔表达式!
标签: c# java boolean type-conversion