我正在使用servlet来做一系列事情。
如果某个特定参数“t”不存在,我想进行某些类型的处理,如果是,我想做不同的事情。
我正在尝试使用以下条件测试参数t(我将其保存为名为editType的String):
String editType = request.getParameter("t");
if(!editType.isEmpty()||!(editType==null)){
//processing here
}
我如何正确地进行此测试,因为我遇到了nullpointerexception的问题,因为我的代码似乎总是期望“t”的值我需要能够创建一个不期望t的条件(允许它为null),然后进行处理。
答案 0 :(得分:15)
您需要稍微重新排序比较,特别是首先检查null
:
String editType = request.getParameter("t");
if(editType!=null && !editType.isEmpty()){
//processing here
}
您遇到的问题是Java正在尝试在isEmpty()
对象上调用null
方法,这就是您需要先检查null
的原因。
Java使用Short-circuit evaluation,这意味着它将从左到右检查您的条件,一旦找到一个让它决定整个条件的结果,它就会停止评估。因此,如果editType
最终为null,则Java将停止评估整个if
语句,并且不会尝试调用isEmpty()
(这将导致NullPointerException
)。< / p>
答案 1 :(得分:2)
啊,我看到你标记了nullpointerexception
,所以我猜了一下。你应该首先测试null,然后测试空虚:
if (editType != null || !editType.isEmpty()) {
//processing here
}
但是,如果editType
为空字符串,则会评估为true。要获得正确的结果,您应该使用AND(&amp;&amp;)而不是OR(||),如下所示:
if (editType != null && !editType.isEmpty()){
//processing here
}
答案 2 :(得分:1)
您应该将其更改为
String editType = request.getParameter("t");
if(editType != null && !editType.isEmpty()){
//processing here
}
有一些提供ifEmpty()方法的StringUtil类很有用,因为这很常见:
public static final class StringUtil {
private StringUtil() {
}
public static boolean isEmpty(String s) {
return s != null && !s.isEmpty();
}
}
然后将您的代码更改为
String editType = request.getParameter("t");
if(!StringUtil.isEmpty(editType)){
//processing here
}
答案 3 :(得分:0)
运行此代码时会遇到问题。
这样做更好:
String editType = request.getParameter("t");
if(editType!=null&&!editType.isEmpty()){
//processing here
}
null测试必须在前面,以避免在null上进行方法调用。
答案 4 :(得分:0)
首先,从左到右评估if语句中的条件。所以它检查的第一件事是editType.isEmpty(),如果editType为null,你将有一个空指针异常。所以if的第一部分应该是editType!= null(首选!(editType == null))。
答案 5 :(得分:0)
String editType = request.getParameter("t");
if(!(editType == null || editType.isEmpty())){
//processing here
}
对某些人来说,这读得更好。