整数类型&&在Java中为空

时间:2010-06-28 17:41:43

标签: java

我有一个类如:

class node 
{
    Integer id ; 
    double lon;
    double lat ; 
    ..... 
}

其他类中有一个方法从节点类中获取参数,并通过它们进行一些操作.... 在这个方法中,有条件,如(node1.getId == node2.getId)...

现在我需要给这个方法node1,node2参数,其中node1的id为null。 当它比较(node1.getId == node2.getId)时,抛出NullpointerException ......

Java中是否存在一个整数类型,我可以将它的对象与null进行比较?喜欢C#中的“int?”。

3 个答案:

答案 0 :(得分:2)

没有像?那样的东西。如果null有可能,则必须对其进行测试。

所以,

if (node1 == null || node2 == null) {
   return false;
}

答案 1 :(得分:2)

有关可能发生的事情的进一步信息。

从你的错误中,我猜你以前的吸气者是:

public int getId() {
    return id; //Integer, needs to be converted
}

Java让你在int中更改Integer,实际调用的是:

public int getId() {
    return id.intValue(); //Get the actual "int" value from the object
}

这就是为什么使用null id调用此方法会引发NullPointException,甚至在获取值之前。因为在您可以访问此方法之前调用了此方法。

这是一个经常发生的陷阱,因为它们允许从Integer到int的相反透明转换。如果您不知道幕后发生了什么,这很方便,但很难诊断。

答案 2 :(得分:1)

我认为你可以使用Integer类而不是int类型。这是一个例子:

public class myClass {
  Integer id;
  public myClass() {
     // A constructor with no arguments
     id = null;
  }
  public void setId(int val) {
     id = new Integer(val);
  }
  public Integer getId() {
     return Id;
  }
}

Integer课程的参考资料如下:http://java.sun.com/javase/7/docs/api/java/lang/Integer.html

请注意,getId方法返回一个Integer对象,该对象可以是一个空对象。因此,可以评估if(getId()==null) {...}

之类的内容

希望这是有帮助的