java中的if with AND运算符
我有一段使用if语句和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
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这将导致伪代码值!=收敛或值!=另一个字符串
始终为真
,因为值
不能同时等于两个字符串为什么我投了反对票?