Java 这两种方法有什么区别

Java 这两种方法有什么区别,java,object,return,pass-by-reference,pass-by-value,Java,Object,Return,Pass By Reference,Pass By Value,这两种方法计算一个单体的导数,但我不明白它们之间有什么区别,它们做的是相同的事情吗?为什么一个有返回,而另一个对调用对象进行更改? 哪一个更好? 通常,我应该如何返回对象 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() { thi

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

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);
}

你可以在谷歌上搜索一下细节。一开始这里有很多东西

  • 区别:一个是返回一个对象Monom,一个是“void”

  • 原因:这取决于您的业务或您想要构建的代码的目的。返回的对象被下一步使用,或者只是显示数据。“void”表示您不想获取任何数据,而是想在该方法中执行某些操作

  • 哪一个更好:很难说。正如前面的解释,这应该取决于你的需要

  • 您应如何返回:请参考以下内容:

  • 继续多搜索/多练习。那就容易多了


    希望有此帮助。

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

    此方法

    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);
    }
    
    不会更改实例的状态,当您希望具有不可变对象时,它非常有用。它可以用于处理初始状态和处理后状态

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

    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);
    }
    
    更改当前实例的状态,因此该实例不是不可变的。当需要重用实例时,它可能很有用

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

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

    让我们考虑下面的类:

    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;
        }
    }
    
    这里,
    setmein
    修改了对象的内部状态,但没有返回值。另一方面,
    getMein
    返回对象的当前状态,但不修改它

    考虑一下您在用例中到底需要什么:如果您想要修改对象的内部数据,那么使用第二种方法。例如,如果要返回计算结果或内部状态,请将某些内容返回给调用者,以便调用者可以使用它进行操作


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

    通常,您希望避免基于这样的观点提出问题。你应该把你的问题修改成有明确答案的问题。你完全理解。第一个创建一个
    新的
    对象,第二个变异
    这个
    对象。第一个更好,如果您可能需要原始值,而第二个会丢失原始值。请注意,在创建对象时,可以通过escape分析消除此类短期对象。