检查列表对象在java中是否为空

检查列表对象在java中是否为空,java,null,Java,Null,我正在检查列表对象是否为null,或者是否使用java。但我不确定这是否是优化的方式 这是我的密码: List<String> listSCBPLNewErrMsgs= new ArrayList<String>(Arrays.asList(SCBPL_NEW_ERRORMESSAGES.split("\\$\\@"))); List List scbplnewerrmsgs=newarraylist(Arrays.asList(SCBPL\u new\u ERRORM

我正在检查
列表
对象是否为
null
,或者是否使用java。但我不确定这是否是优化的方式

这是我的密码:

List<String> listSCBPLNewErrMsgs= new ArrayList<String>(Arrays.asList(SCBPL_NEW_ERRORMESSAGES.split("\\$\\@")));
List List scbplnewerrmsgs=newarraylist(Arrays.asList(SCBPL\u new\u ERRORMESSAGES.split(“\\$\@”));
上面的行本身抛出空指针异常

if(listSCBPLNewErrMsgs != null) <Right way?>
if(listSCBPLNewErrMsgs!=null)
这将从配置中获取所有值


现在,如果明天我更改配置条目,这不应该引发空指针异常

如果您想检查它是否为空,这是正确的方法(即使它永远不会为空),但是如果您只是想检查列表是否为空,那么您应该使用
isEmpty()
方法:

if(listSCBPLNewErrMsgs.isEmpty()) {/**/}

从代码的外观来看,listSCBPLNewErrMsgs对象不会为空。使用
listscblnewerrmsgs.isEmpty()测试它是否为空

您需要为
SCBPL\u NEW\u ERRORMESSAGES
添加空检查

if (SCBPL_NEW_ERRORMESSAGES != null && !SCBPL_NEW_ERRORMESSAGES.isEmpty()) {

在声明中,列表不能为空,因为您正在执行
新建ArrayList
。 所以不需要担心空指针异常

if(listSCBPLNewErrMsgs != null) <Right way?>

如果您希望检查空列表。 然后你可以试试这个方法

if(SCBPL\u NEW\u ERRORMESSAGES!=null&&!SCBPL\u NEW\u ERRORMESSAGES.isEmpty()){
List listSCBPLNewErrMsgs=new ArrayList(Arrays.asList(SCBPL\u new\u ERRORMESSAGES.split(“\\$\@”));
如果(!listSCBPLNewErrMsgs.isEmpty()){
//做点什么。
}
}

如果
SCBPL\u NEW\u ERRORMESSAGES
为空,则会引发NPE异常,因为您将在
null
上使用
split
方法

您可以首先检查该值是否为空:

if (SCBPL_NEW_ERRORMESSAGES != null) {
      //Instantiate list
      //Optional isEmpty check
}
首先检查
SCBPL\u NEW\u ERRORMESSAGES
是否为空


然后您可以实例化列表并对新列表执行可选的
isEmpty
检查。

Java中的
new
操作符可以从不返回
null
。两者都不能

但是,您可能需要检查的是,列表不是空的:

if (listSCBPLNewErrMsgs.isEmpty()) {
    // do something
}

如果
SCBPL\u NEW\u ERRORMESSAGES
为空,则代码仍将失败

假设
SCBPL\u NEW\u ERRORMESSAGES
有一些值或为空,拆分将返回大小为0或更大的数组。将其从数组更改为列表将生成包含0个或更多元素的数组


最后,复制构造函数将复制内容并将其分配给新列表。在所有情况下,除非
SCBPL\u NEW\u ERRORMESSAGES
上有空指针,否则返回的列表(
listSCBPLNewErrMsgs
)将永远不会为空,最多为空,可以通过
isEmpty()
方法调用进行检查

根据您的评论,如果您在该行上得到一个
null
指针,这应该是因为
SCBPL\u NEW\u ERRORMESSAGES
为null

试试这个:

List<String> listSCBPLNewErrMsgs = null;
if(SCBPL_NEW_ERRORMESSAGES != null) {
    listSCBPLNewErrMsgs= new ArrayList<String>(Arrays.asList(SCBPL_NEW_ERRORMESSAGES.split("\\$\\@")));
}
else {
    listSCBPLNewErrMsgs = new ArrayList<>();
}
列表SCBPLNEWERRMSGS=null;
如果(SCBPL\u新建\u错误消息!=null){
listSCBPLNewErrMsgs=newarraylist(Arrays.asList(SCBPL\u new\u ERRORMESSAGES.split(“\\$\@”));
}
否则{
listSCBPLNewErrMsgs=newarraylist();
}
if(SCBPL\u NEW\u ERRORMESSAGES!=null)
List listSCBPLNewErrMsgs=new arraylistarays.asList(SCBPL\u new\u ERRORMESSAGES.split(“\\$\@”));

不需要
listSCBPLNewErrMsgs!=空
正如大家所说的

首先,您必须检查SCBPL\u NEW\u ERRORMESSAGES是否为空

if(!TextUtils.isEmpty(SCBPL_NEW_ERRORMESSAGES))
您必须同时检查列表是否为空/空。所以我更喜欢

if(listSCBPLNewErrMsgs != null && !listSCBPLNewErrMsgs.isEmpty()) {
}

listSCBPLNewErrMsgs
不会为空,因为您刚刚实例化了它。但是,它可能有0个元素。并且对象不能为
null
。对象引用,例如
listSCBPLNewErrMsgs
中的引用,可以是
null
,但不能是对象。但正如Ori所说,上面的肯定不会是。你确定
SCBPL\u NEW\u ERRORMESSAGES
是非空的吗?是的。SCBPL_新错误消息。。我是穆雷尼克。我已经更新了问题,你能检查一下吗。。实例化本身正在抛出空指针exception@Nizam您是否验证了
SCBPL\u NEW\u ERRORMESSAGES
是否不为空?我已更新了问题,请检查。。实例化本身正在抛出空指针异常我更新了问题,请检查。。实例化本身正在抛出空指针异常检查SCBPL_NEW_ERRORMESSAGES对象是否为空我已更新问题,请检查。。实例化本身正在抛出空指针,但我想您忘记了一元布尔运算符“!”完全正确。。List listSCBPLNewErrMsgs=new ArrayList(Arrays.asList(SCBPL\u new\u ERRORMESSAGES.split(“\\$\@”));这条线本身就是null@Nizam:我已经更新了我的答案。您在该行中执行了3个操作,其中两个永远不会返回null,最多返回一个空集合。但是,如果尝试在空字符串上拆分,将得到NullPointerException。
if(listSCBPLNewErrMsgs != null && !listSCBPLNewErrMsgs.isEmpty()) {
}