Так как операторы == и ! можно перегрузить, то будет зависеть от их реализации, для чисел и то и другое сравнение с нулем, но идеологически if(!x) это две операции, когда как == только одна, понятно что компилятор может оптимизировать по своему.
Еще сравнивать с false - читабельнее.
И лучше писать:
if(false == value) {...}
это сильно уменьшает вероятность ошибки (например вместо == написали =)