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的顺序是否等于B而B是否等于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