这两种方法有什么区别
What is the difference between these two methods
这两种方法计算monom的导数,但我不明白它们之间有什么区别,它们做的是一样的事情吗?为什么一个有 return 而另一个对调用对象进行更改?
哪一个更好?
一般来说,我应该如何 return 对象?
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);
}
您可以 Google 详细了解一下。开头的东西还真不少。
区别:一个是 returned 一个 Object Monom,一个是 "void"
原因:这取决于您的业务或您要构建的代码的目的。返回的对象用于下一步或仅显示数据。 "void" 表示您不想获取任何数据,而是在该方法中执行一些操作
哪个更好:很难说。正如前面的解释,这应该取决于你的需要
你应该如何 return:参考这个:https://docs.oracle.com/javase/tutorial/java/javaOO/returnvalue.html
继续搜索 more/practice。那就简单了。
希望对您有所帮助。
第一种方法创建一个包含操作结果的新对象,但不影响当前对象,第二种方法直接更改您正在使用的对象。
这个
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
虽然您说这两种方法的作用相同,但这不一定是真的,因为您的第一个方法计算结果并 returns 它,您的第二个方法计算结果,但将其分配给状态在当前对象中。
让我们考虑以下 class:
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
修改了对象的内部状态,但是没有return值。另一方面,getMeal
return 对象的当前状态,但不修改它。
想想你的用例到底需要什么:如果你想修改一个对象的内部数据,那么使用第二种方式。如果你想return例如计算的结果或内部状态,给调用者一些东西,这样他就可以用它来操作。
最后,这只是一些想法,实现一个特定的问题总是有很多不同的可能性,所以这个问题没有完美的答案。
这两种方法计算monom的导数,但我不明白它们之间有什么区别,它们做的是一样的事情吗?为什么一个有 return 而另一个对调用对象进行更改? 哪一个更好? 一般来说,我应该如何 return 对象?
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);
}
您可以 Google 详细了解一下。开头的东西还真不少。
区别:一个是 returned 一个 Object Monom,一个是 "void"
原因:这取决于您的业务或您要构建的代码的目的。返回的对象用于下一步或仅显示数据。 "void" 表示您不想获取任何数据,而是在该方法中执行一些操作
哪个更好:很难说。正如前面的解释,这应该取决于你的需要
你应该如何 return:参考这个:https://docs.oracle.com/javase/tutorial/java/javaOO/returnvalue.html
继续搜索 more/practice。那就简单了。
希望对您有所帮助。
第一种方法创建一个包含操作结果的新对象,但不影响当前对象,第二种方法直接更改您正在使用的对象。
这个
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
虽然您说这两种方法的作用相同,但这不一定是真的,因为您的第一个方法计算结果并 returns 它,您的第二个方法计算结果,但将其分配给状态在当前对象中。
让我们考虑以下 class:
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
修改了对象的内部状态,但是没有return值。另一方面,getMeal
return 对象的当前状态,但不修改它。
想想你的用例到底需要什么:如果你想修改一个对象的内部数据,那么使用第二种方式。如果你想return例如计算的结果或内部状态,给调用者一些东西,这样他就可以用它来操作。
最后,这只是一些想法,实现一个特定的问题总是有很多不同的可能性,所以这个问题没有完美的答案。