java中的if with AND运算符

java中的if with AND运算符,java,Java,我有一段使用if语句和AND运算符的代码: final String NODE_TYPE_LIST = "List"; final String NODE_TYPE_DETAIL = "Detail"; if ((!NODE_TYPE_LIST.equalsIgnoreCase(dataNodeBean.getType())) && (!NODE_TYPE_DETAIL.equalsIgnoreCase(dataNodeBean.getT

我有一段使用if语句和AND运算符的代码:

final String NODE_TYPE_LIST = "List";
final String NODE_TYPE_DETAIL = "Detail";
if ((!NODE_TYPE_LIST.equalsIgnoreCase(dataNodeBean.getType())) 
                    && (!NODE_TYPE_DETAIL.equalsIgnoreCase(dataNodeBean.getType()))) {
                throw new InvalidNodeTypeException("Invalid Node type.");
            }
例如,如果dataNodeBean.getType()返回“List”。 根据link,只有当if语句中的两个表达式都返回true时,上述代码才会抛出InvalidNodeTypeException。但是,当我调试程序时(其中dataNodeBean.getType()返回“List”),我看到两个表达式都在求值,即使第一个表达式返回false,结果抛出InvalidNodeTypeException(自定义异常)。 我期望从这段代码中得到的是,当dataNodeBean.getType()既不返回List也不返回Detail时抛出异常。
我不明白我做错了什么。

您的代码非常好。我运行了以下测试:

public static void main(String[] args) {
    System.out.println(test("A"));
    System.out.println(test("B"));
    System.out.println(test("C"));
}

private static boolean test(String value) {
    return (!"a".equalsIgnoreCase(value)) && (!"b".equalsIgnoreCase(value));
}
它回来了

false
false
true

正如你所料。我怀疑问题出在
getType
方法中。一种简单的确认方法是将检查移动到一个单独的方法,该方法传递
getType
的结果,然后编写一些单元测试,确认它对除“list”或“detail”之外的任何内容都返回true.

您确定
getType
返回的是
String
而不是其他对象吗?@npinti yes getType返回String.@KrutiPatel这将导致伪代码
值!=收敛或值!=另一个字符串
始终为
,因为
不能同时等于两个字符串为什么我投了反对票?