这两种方法有啥区别

Posted

技术标签:

【中文标题】这两种方法有啥区别【英文标题】:What is the difference between these two methods这两种方法有什么区别 【发布时间】:2019-03-31 07:24:30 【问题描述】:

这两种方法计算一个monom的导数,但我不明白它们之间有什么区别,它们做同样的事情吗?为什么一个有返回值而另一个对调用对象进行更改? 哪一个更好? 一般来说,我应该如何返回对象?

public Monom Der()

    double a = this.get_coef() * this.get_pow();
    int b = this.get_pow() - 1;
    return new Monom(a, b);


public void Der()

        this.set_coefficient(this._power * this._coefficient);
        this.set_power(this._power - 1);

【问题讨论】:

一般来说,您希望避免关于 SO 的基于意见的问题。你应该把你的问题改写成有明确答案的东西。 你完全理解。第一个创建一个new 对象,第二个改变this 一个。第一个更好,如果您可能需要原始值,第二个会丢失。 【参考方案1】:

您可以在 Google 上搜索一下详细信息。这里开头的东西挺多的。

    区别:一个是返回Object Monom,一个是“void”

    原因:这取决于您的业务或您想要构建的代码的目的。 Returned Object 供下一步使用或仅显示数据。 “void”表示您不想获取任何数据,而是在该方法中执行一些操作

    哪个更好:很难说。和前面的解释一样,应该看你的需要

    你应该如何返回:参考这个:https://docs.oracle.com/javase/tutorial/java/javaOO/returnvalue.html

继续搜索/练习更多。然后就容易多了。

希望对您有所帮助。

【讨论】:

【参考方案2】:

第一种方法创建一个包含操作结果的新对象,但不影响当前对象,第二种方法直接更改您正在使用的对象。

【讨论】:

【参考方案3】:

这个

public Monom Der() 
    double a = this.get_coef() * this.get_pow();
    int b = this.get_pow() - 1;
    return new Monom(a, b);

不改变实例的状态,当你想拥有不可变的对象时它很有用。它可用于处理初始状态和处理后状态两种状态

Monom initialMonom = new Monom(2, 2);
Monom theNewMonom = initialMonom.Der();
// do something with both initialMonom and theNewMonom

这个

public void Der() 
    this.set_coefficient(this._power * this._coefficient);
    this.set_power(this._power - 1);

更改当前实例的状态,因此该实例不是不可变的。当需要重用实例时,它会很有用

Monom initialMonom = new Monom(2, 2);
// do something with initial monom
initialMonom.Der(); // mutate the initial monom
// do something with the new state 

【讨论】:

请注意,虽然它在全国范围内创建对象,但可以通过逃逸分析消除诸如此类的短期对象。【参考方案4】:

虽然您说两种方法的作用相同,但这不一定是真的,因为您的第一个方法计算结果并返回它,您的第二个方法计算结果,但将其分配给当前对象中的状态。

让我们考虑以下类:

public class Dinner 

    private Meal meal;

    public Dinner(Meal meal) 
        this.meal = meal;
    

    public Meal getMeal(Meal meal) 
        return meal;
    

    public setMeal(Meal meal) 
        this.meal = meal;
    

这里setMeal修改了对象的内部状态,但是没有返回值。另一方面,getMeal 返回对象的当前状态,但不修改它。

想想你的用例到底需要什么:如果你想修改一个对象的内部数据,那么就选择第二种方法。例如,如果您想返回计算结果或内部状态,请将某些内容返回给调用者,以便他可以对其进行操作。

最后,这只是一些想法,实现特定问题总是会带来很多不同的可能性,因此对于这个问题没有完美的答案。

【讨论】:

以上是关于这两种方法有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

C ++中这两种强制转换方法有啥区别? [复制]

这两种方法有啥区别?是啥让第二个比第一个更好?

K均值聚类法和系统聚类法有啥区别,这两种聚类方法的适用条件都是啥?

这两种符号有啥区别?

在C++种,关于指针的这两种表示有啥区别:double * a和double ** a?两个**是啥意思呢?

这两种类型的闭包有啥区别?