If语句 – null安全的变量顺序

假设我想检查列表中的第一个元素是否等于“是”或“否”。

dummy_method(List myList) { if(myList.isEmpty()) { return null; } String firstListValue = myList.get(0).getStringValue(); // Should I do this: if ("YES".equalsIgnoreCase(firstListValue)) { return firstListValue; } // OR this: if (firstListValue.equalsIgnoreCase("YES")) { return firstListValue; } // Do something else } 

换句话说:当我已经进行空检查时, A的顺序是否等于BB是否等于A的顺序?

是。 这很重要。

您只检查列表是否为非空。 如果列表中的第一个元素为null,那么您将获得NullPointerException

 firstListValue.equalsIgnoreCase("YES") 

但是,如果您可以确保列表中的所有元素(或至少第一个元素)都是非null,那么这两个语句都是等效的。

对于null安全,你可以使用你的第一个,如下所示:

 if ("YES".equalsIgnoreCase(firstListValue)) { return firstListValue; } 

因为“YES”是硬编码的字符串,不会为空。 在第二种方法中,只要list元素为null,就会得到NullPointerException

如果列表为null,则此检查也将抛出NullPointerException ,因此您可以检查这两个条件

 if(myList!=null && !myList.isEmpty()) 

并且还需要’null’检查通过’get()’检索的所有值,因为如果list为空或指定索引超出范围’get()’方法将不会抛出’NullpointerException’,它将只返回null