Java 调用运算符时出现NullPointerException

Java 调用运算符时出现NullPointerException,java,object,nullpointerexception,operator-keyword,Java,Object,Nullpointerexception,Operator Keyword,我有一个在java类中定义的分数对象。我需要能够用我创造的分数做数学题。当我用一个未定义的分数进行数学运算时,我需要返回null。我的问题是,当用户不知道返回了null,并试图对设置为null的分数对象进行计算时 比如说 Fraction f1=null; Fraction f2=new Fraction(1, 2); Fraction f3=f1.add(f2); 这会给我一个错误。但是当我用另一种方式做的时候,没有错误 Fraction f1=null; Fraction f2=new F

我有一个在java类中定义的分数对象。我需要能够用我创造的分数做数学题。当我用一个未定义的分数进行数学运算时,我需要返回null。我的问题是,当用户不知道返回了null,并试图对设置为null的分数对象进行计算时

比如说

Fraction f1=null;
Fraction f2=new Fraction(1, 2);
Fraction f3=f1.add(f2);
这会给我一个错误。但是当我用另一种方式做的时候,没有错误

Fraction f1=null;
Fraction f2=new Fraction(1, 2);
Fraction f3=f2.add(f1);
这不会出错,而是返回null

为什么上面的示例会出错?我如何强制它返回null?此外,如果分数为null,则检查不能在我的测试程序中进行,它必须在分数类中进行。
add操作符工作得很好。当分数对象等于null时,我只希望它返回null。

null
对象上调用方法,将始终以
NullPointerException
null
对象上调用方法结束,将始终以一个
NullPointerException

结束,因为您无法对
null
对象调用方法,所以您尝试执行的操作是不可能的。尝试它总是会产生错误和例外。但是,如果这对您非常重要,您可以将API更改为具有两个参数的静态方法:

public static Fraction add(Fraction f1, Fraction f2)

现在,如果其中一个参数为
null
,则可以返回
null
,,因为您无法对
null
对象调用方法,所以无法尝试执行此操作。尝试它总是会产生错误和例外。但是,如果这对您非常重要,您可以将API更改为具有两个参数的静态方法:

public static Fraction add(Fraction f1, Fraction f2)

现在您可以返回
null
,如果其中一个参数为
null

,那么上面的示例将失败,因为
f1
为null,并且您无法在null上调用函数。你能做的就是用一个静态函数替换你的函数,这个静态函数可以同时测试两个操作数。对空引用调用方法是一个错误,并且总是会导致NPE。您希望分数f3在第二个示例中返回空值吗?@Scitech第二个示例已经返回空值。这是正确的。我希望第一个示例返回null。这不会发生。上面的示例失败,因为
f1
为null,并且不能在null上调用函数。你能做的就是用一个静态函数替换你的函数,这个静态函数可以同时测试两个操作数。对空引用调用方法是一个错误,并且总是会导致NPE。您希望分数f3在第二个示例中返回空值吗?@Scitech第二个示例已经返回空值。这是正确的。我想让第一个例子返回null,这是不可能的。