迟到的答案,但我会尽力了解你的真正观点。
你是对的。表达观点的最简单方法是提及其他类型语言(如 Visual Basic)具有可以作用于布尔表达式和整数表达式的逻辑运算符。
VB 或运算符:http: //msdn.microsoft.com/en-us/library/06s37a7f.aspx
VB按位示例:http: //visualbasic.about.com/od/usingvbnet/a/bitops01_2.htm
这在很大程度上是一个语言设计决定。Java 和 C# 不一定要像现在这样。他们就是他们现在的样子。为了熟悉起见,Java 和 C# 确实从 C 中继承了大部分语法。其他语言没有,而且工作得很好。
像这样的设计决策会产生后果。短路评估是其中之一。禁止混合类型(这可能会让人难以理解)是另一回事。我开始喜欢它,但也许我只是盯着 Java 太久了。
Visual Basic 添加了 AndAlso 和 OrElse 作为进行短路评估的方法。与基本的其他逻辑运算符不同,这些运算符仅适用于布尔值。
VB OrElse:http: //msdn.microsoft.com/en-us/library/ea1sssb2.aspx
短路说明: http: //support.microsoft.com/kb/817250
之所以没有区分是因为强类型化使得一种语言不可能只有一组逻辑运算符。这样做是因为他们想要进行短路评估,并且他们想要一种清晰的方式来向读者发出正在发生的事情的信号。
c 和 c++ 具有不同类型的逻辑运算符的另一个原因(除了短路)是允许将任何非零数重新解释为 TRUE 并将零重新解释为 FALSE。为此,他们需要操作员告诉他们以这种方式进行解释。Java 拒绝整个重新解释的想法,如果您尝试使用它的逻辑运算符这样做,则会在您的脸上抛出一个错误。如果不是为了短路评估,剩下的唯一原因就是因为他们希望操作员在做不同的事情时看起来不同。
所以是的,如果 Java 和 C# 语言设计者不关心这些,他们可以使用一组逻辑运算符来处理按位和布尔逻辑,并像其他一些语言一样根据操作数类型确定要做什么。他们只是没有。