变异参数是否总是引入依赖于顺序的行为?

时间:2018-01-22 14:24:48

标签: java functional-programming mutation

我被告知突变导致方法依赖于顺序(例如Mutation

但是,考虑到以下方法(为简单起见忽略null),我无法看到在相同的参数下,两者的行为方式如何。

SQLParameterCollection

所以我的问题是:

  1. 是否存在与方法x相关的任何排序问题,因为它会改变输入?
  2. x可以被视为具有副作用,但是,这实际上是否比方法y有任何缺点?比如y更容易并行化?

1 个答案:

答案 0 :(得分:2)

如果在x之后运行y,则会得到不同的输出,尽管y的调用看起来是一样的。

StringBuffer stringBuffer = new StringBuffer();
x(stringBuffer);
System.out.println(y(stringBuffer)); // gives aa

StringBuffer stringBuffer = new StringBuffer();
System.out.println(y(stringBuffer)); // gives a
x(stringBuffer);

在这个小例子中,stringBuffer中实例的内部状态决定了输出,并且调用哪个方法的详细信息对此非常重要。

x有副作用,因为它会更改StringBuffer实例的状态。可能有几个优点和缺点,讨论它们超出了范围。

PS:在Java中使用StringBuilder而不是StringBuffer