最好使用原语或对象作为方法参数并在JAVA中返回值吗?

时间:2012-02-15 01:04:34

标签: java parameters

在JAVA中(我猜一般的OO语言),最好使用原语或对象作为方法参数并返回值吗?

当我说“原始”或“对象”时,我说的是Long或long,int或Integer等。

例如:

public int doStuff(int number1, int number2) {
...
}

OR

public Integer doStuff(Integer number1, Integer number2) {
...
}

OR

public Integer doStuff(int number1, int number2) {
...
}

OR 

public int doStuff(Integer number1, Integer number2) {
...
}

我想我们应该小心对象作为参数,因为它们可以为null?

4 个答案:

答案 0 :(得分:2)

  

我想我们应该小心对象作为参数,因为它们可以为null?

完全。这就是我使用原始类型来表示值不能为null的原因,以及表示它可以为null的包装器类型。

例如:

/**
 * @param threads  the desired number of threads, or null if the number 
 *                 of threads should be chosen automatically.
 */
void setNumberOfThreads(Integer threads) { ... }

/**
 * @returns the number of children, or null if not known.
 */
Integer countChildren() { ... }

但:

void setVelocity(double dx, double dy);

因为零速度会破坏物理模拟。

答案 1 :(得分:0)

如果您不知道应该使用哪种,则应该更喜欢原始类型。通过使用原始类型,您可以使用==并且永远不会获得NullPointerException。如果在某些情况下需要null,请使用盒装基元(对象)。

答案 2 :(得分:0)

这取决于。并非每种语言都有这种区别,有些只有对象(狭义上)。而且我不认为这个问题与OO原则有很大关系。

两者有什么区别?

可能存在性能差异。但是你知道关于过早优化的古老说法吗?如果您在这里没有遇到性能问题,那么请不要关心它。您作为开发人员的时间比处理器时间更重要。

留下语义差异:在Java中有一个很大的区别。对象可以为null。因此,如果您需要可以为空的值(数据库ID!),请使用对象。否则原始类型有时会有更好的语法。

答案 3 :(得分:0)

它取决于你在使用你的方法的客户端代码中做了什么。我建议尽量使用原语。并且在您无法找到使用原语完成工作的方法的情况下使用引用类型。以下示例将向您展示引用类型的有害程度。

 // Hideously slow program! Can you spot the object creation?
public static void main(String[] args) {
Long sum = 0L;
for (long i = 0; i < Integer.MAX_VALUE; i++) {
sum += i;
}
System.out.println(sum);
}   

在这种情况下,它会创建不需要的2 ^ 31个Long对象。考虑使用Long类型(用于sum变量)并用long替换它将获得良好的性能增强。