为什么 Java Boolean 实现了 Comparable?

问题描述

在 Java 中,未为原始 < 类型定义运算符 >>=<=boolean。 但是,相应的包装类 Boolean 实现了 Comparable。 即:true > false一个错误,但 Boolean.TRUE.compareto(Boolean.FALSE) > 0 没问题。

怎么会? 语言设计者改变主意了吗? 那为什么要保持语无伦次的行为呢?

尽管随意,但我可以想到为布尔值定义总顺序的优点。 有什么缺点吗?

解决方法

编程语言不是数学结构。它们是跨越多年和许多不同人员的复杂项目。因此,他们会受到意见、遗产、分歧、炒作周期、其他语言的影响、沟通不畅,不幸的是,有时也会犯错误和愚蠢。您可能会争辩说,大多数关于语言的决定实际上都是武断的。

你的问题完全正确:为什么会这样?不幸的是,不询问做出相关提交的人他们还记得多少并不是一个真正可行的选择。所以你的猜测和其他人一样好。

这是事实,但您有权发表自己的意见。可悲的是,在某些情况下,这种不一致会令人沮丧,以至于人们放弃一种语言并创建一种新语言。但由于计算机是物理的、有限的东西,任何新语言也将是不完美和自以为是的。

如果您问我,在 boolean 上进行完全排序是个好主意 - 它不会伤害任何人,而在某些(尽管非常有限)的情况下它可以提供一些有限的好处。但是,Java 还存在更多、更大的问题。就目前而言,我认为 Oracle 不会冒险通过改变这种行为来破坏任何现有程序。