我已经有了像这样的方法
public ArrayList<T> GetDoctorDetail(String name)
{
if (name!=null || !name.isEmpty() || name!="")
{
//Statements
}
}
但在eclipse中!用黄线显示下划线 空指针访问:变量名在此位置只能为空。
为什么呢?什么是解决方案。
答案 0 :(得分:10)
如果name
为非null,则条件||
运算符根本不会计算第二个操作数。因此,可以评估第二个操作数的仅情况是name
为空时,在这种情况下它将抛出。
我怀疑你想要
if (name != null && !name.isEmpty())
{
// Use name
}
或者可能:
if (name == null || name.isEmpty())
{
// Show an error message
}
请注意,将字符串与==
和!=
进行比较 几乎总是错误的做法,因为它会比较引用。您通常会使用equals
代替。不仅如此,但无论如何它都没用 - 它只能等于“”,如果它是空的,那么它与第二个操作数完全相同。
答案 1 :(得分:1)
如果name = null,则oR条件的第一部分将失败。因此第二部分将抛出空指针异常。
编写该条件的正确方法是
if (name!=null && (!name.isEmpty() || name!=""))
答案 2 :(得分:0)
if (name != null && !name.isEmpty()) {
// Now the name variable has valid content
}
注意 - 如果您创建“肯定”检查,逻辑总是更容易理解:
if (name == null || name.isEmpty()) {
// Now name is either null or empty
} else {
// Now the name has valid content
}
尽量避免检查“否定”状态的条件,例如“is not null”和“is not empty”。他们只是脑筋急转弯;)