Ответом на If not, then why not?
является «потому что спецификация языка так говорит» (см. Комментарий Карлоса Х.).
А ответом «почему спецификация языка так говорит» является то, что язык определяетЭта тенденция запрещает конструкции, которые не имеют смысла, когда это возможно, и эта тенденция вдохновлена их верой в то, что, делая это, они помогают вам писать лучший код.
РЕДАКТИРОВАТЬ
re,«действительно ли определение логического значения как (2 + 2 == 5) имеет более логичный смысл, чем ...»: нет, это не так, но:
(a) это невозможно (то естьнеосуществимо с точки зрения логистики) для определителей языка провести инвентаризацию всего, что может быть написано, но не имеет логического смысла (*)
(b) проблема такого рода сводится к доказательству пустоты набора (например, доказательство того, что множество всехвозможные экземпляры String, которые также являются экземплярами StringBuilder (пустые) и доказывают пустоту набора в общем , поскольку проблема является NP-трудной.Учитывая конкретную дополнительную информацию, это может быть возможно, а иногда и делается, например, учитывая иерархию типов, которая почти буквально говорит: «StringBuilder также не может быть StringBuilder».Но в общем , это невозможно исправить.Вот почему вы всегда будете находить случаи, если только вы продолжаете искать достаточно усердно.
(*) Для вашего чувства «логического смысла», но что вы(/ мы все) действительно имеем в виду, на самом деле это просто «хорошая практика программирования», одним из которых было бы «избегать запутанных способов написания false
».Это может показаться вам нелогичным, но в логике нет понятия «логический смысл».2+2==5
это просто еще одно логическое утверждение, и оно оказывается ложным.Логика не жалуется на ложь, она просто наблюдает за ними.
(PS Я знаю, что использовал "не имеет смысла" тоже, не должен был, но я позволил себе увлечься.)