不同的空对比?

时间:2015-08-19 19:41:54

标签: java android

这两个代码之间的区别是什么?:

代码1

在我的第一个代码中,我有一个变量,我直接将它变为null。

String prove = null;

Toast.makeText(getApplicationContext(), prove, Toast.LENGTH_LONG).show(); 

if(prove == null)
{
  Toast.makeText(getApplicationContext(), "correct", Toast.LENGTH_LONG).show();
}
else
{
  Toast.makeText(getApplicationContext(), "incorrect", Toast.LENGTH_LONG).show();
}

结果1

null
correct

代码2

在我的第二个代码中,我有一个名为Car的类,其GETSET方法,但必须返回String的方法返回null。

public class Car {

    private int idCar;
    private String name;

    public Car(){};

    public Car(int idCar, String name)
    {
        this.idCar = idCar;
        this.name = name;
    }

    //Here the rest of GET and SET methods

    public String getName()
    {
        return name;
    }
}

MainActivity.java ArrayListCars ArrayList<Car> cars = new ArrayList<Car>();

Toast.makeText(getApplicationContext(), cars.get(position).getName(), Toast.LENGTH_LONG).show();

if(cars.get(position).getName() == null)
{
   Toast.makeText(getApplicationContext(), "correct", Toast.LENGTH_LONG).show();
}
else
{
   Toast.makeText(getApplicationContext(), "incorrect", Toast.LENGTH_LONG).show();
}

我在CustomAdapter上使用的内容如下:

null
incorrect

结果2

String

两个代码有什么区别?显然他们是相似的,因为在他们两个中我比较null它是null vs {{1}}但他们的行为是不同的。

提前致谢!

1 个答案:

答案 0 :(得分:2)

这两个代码在他们正在做的事情中分开

在第一个示例中,您明确将变量设置为null并与null进行比较。这可以用来推理;你运用的代码路径不会直接将值更改为非null的内容,因此它会使完美意义让你看到你的Toast with& #34;正确&#34;

在你的第二个例子中,你做了两件不同的事情:

  • 您可以使用Toast
  • 中的文字立即创建cars(position).getName()
  • 然后,您检查cars(position).getName()是否为null。可能的情况是不是并显示另一条路径。

如果你想让它们至少相似,你最好将cars(position).getName()移到变量......

String prove = cars(position).getName();

if(prove == null) {
   Toast.makeText(getApplicationContext(), "correct", Toast.LENGTH_LONG).show();
} else {
   Toast.makeText(getApplicationContext(), "incorrect", Toast.LENGTH_LONG).show();
}

我快速浏览了Toast的源代码,如果你提供的字符串是null,它会为你提供一个空字符串(或者是一个toast的toast;空白)。你还没有表明你在第二次吐司中没有看到你提供的文字,所以我认为你cars(position).getName()获得的价值不是空的。