В обоих С#/Java приоритет оператора is соответственно instanceof приводит к некоторым уродливым необходимым скобкам. Например, вместо записи if (!bar instanceof Foo) вам нужно написать if (!(bar instanceof Foo)).
Итак, почему языковые команды решили, что ! имеет более высокий приоритет оператора, чем /instanceof? По общему признанию, в С# вы можете перезаписать operator!, что приведет к другому результату в некоторых ситуациях, но эти ситуации кажутся чрезвычайно редкими (и неинтуитивными в любом случае), в то время как случай проверки того, что что-то не является типом или подтипом что-то гораздо более вероятно.