【问题标题】:Why IF condition is not fulfilled on android [duplicate]为什么在android上不满足IF条件[重复]
【发布时间】:2015-04-26 08:37:33
【问题描述】:

我只想知道为什么编译器允许在第一个条件下正常继续程序:

public void ButtonOnClickDirectoryList(View v){
    try {
        if (!spnOptionSelectedDepartment.equals(null) && !spnOptionSelectedCities.equals(null)) {
            if (!spnOptionSelectedTypes.equals(null)) { //code....}

spnOptionSelectedDepartment 和 spnOptionSelectedTypes 是字符串,在类的开头定义如下:

private String spnOptionSelectedDepartment = null;
private String spnOptionSelectedCities = null;
private String spnOptionSelectedTypes = null;

所以当我按下按钮时,它会调用这个方法,这是我目前拥有的值:

spnOptionSelectedDepartment = "9999"
spnOptionSelectedCities = null
spnOptionSelectedTypes = null

所以当我在这个条件上设置一个断点时,它会继续验证 if... 中的其余代码。 谁能解释我为什么会出现这种行为?

让我编辑这个问题,是的,它会在第二个 if... 时引发 nullpointer 异常。

if (!spnOptionSelectedTypes.equals(null)) {

但是为什么当 spnOptionSelectedCities = null 时它允许第一个 IF...?

【问题讨论】:

  • if (spnOptionSelectedTypes != null)
  • 如果spnOptionSelectedDepartmentnull,上面发布的代码将抛出NullPointerException
  • 您应该使用 == 将字符串与 null 进行比较。 equals 用于比较两个字符串的值。
  • @yu_sha 你是唯一给出真实答案的人,其余的只是标记“不使用完整”,就像他们认为每个人都必须知道一切......
  • @yu_sha 我读了很多如何比较字符串之间的值,它说知道字符串是否具有已知值的更好方法是使用 String.equal() .....

标签: java android if-statement android-studio


【解决方案1】:

它不应该继续,它应该抛出一个 NullPointerException,你可以在 catch 块中拦截它。

当你尝试时

if (!spnOptionSelectedTypes.equals(null))

它应该抛出这个异常,因为spnOptionSelectedTypes 为空,所以它不是String 并且没有任何equals() 方法。

编辑:

它允许第一个 if 通过,因为它有 2 个测试

if (A OR B) {

如果Atrue,则不测试B 条件,因为OR 运算符只需要一个条件即可继续。

编辑 2:

与:

如果(A 和 B){

如果A 为真,B 也将被测试并在spnOptionSelectedCities 为空时抛出NullPointerException

确定答案:

Java 中的空测试

if (x != null && y != null) {
    x.doSomething();
    y.doSomethingElse();
}

【讨论】:

  • 感谢@Gorcyn 的回答,但是是的,它也是一个字符串 private String spnOptionSelectedTypes = null;
  • 编辑回答您自己的版本
  • 嗨@Gorcyn我复制代码错误,它是&&不是||
  • 谢谢大家,我现在明白了 :)
猜你喜欢
  • 2012-06-20
  • 2013-07-08
  • 2021-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-16
  • 1970-01-01
相关资源
最近更新 更多