Boolean b1 = scopes.stream() .anyMatch(x -> x.getProcessStatus() != complete || x.getProcessStatus() != close); 我写了这么一段代码,编译器告诉我这是有问题的,大家可以先想一下编译器提示了什么,下面有答案和我的疑问。 这个表达式是恒为 true 的,我是编译器告诉我后,想了一会才确认这个问题,我觉得奇怪的是这种判断应该是一种逻辑直觉,我没有这种直觉,我好奇这种直觉的缺失是怎么造成的? 编译器, 直觉, tpro, stat
x.getProcessStatus() != complete || x.getProcessStatus() != close 两个不等, 或 只有一种情况才是 false 就是 x.getProcessStatus() == complete && x.getProcessStatus() == close 被满足的时候
你缺失的应该是等效替代的直觉, 看到这种表达式,我一般是去掉否定的同时逆转 或/与 判断条件尽量不要用否定, 因为人是没有否定直觉的。 如果用否定,也尽量让条件简单清晰 举个例子, 不要想小白兔--- 不要想小白兔--- 不要想小白兔--- 不要想小白兔