在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?
答案 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替换它将获得良好的性能增强。