如何克服原语通过价值传递的事实

Aly*_*Aly 4 java primitive

我有一段很长的代码,doubles为我计算两个值(),我在几个地方使用这段代码 - 坚持DRY原则我应该将这些代码重构为一个不错的单元可测试方法.但是我不能让它返回两个双打,双打是原始的,所以不能通过值传递和操纵.我能想到的最干净的方法就是让这个方法返回一个double[].谁能想到更好的方法?

谢谢

cle*_*tus 12

首先,所有变量都是通过Java中的值传递的,而不仅仅是基元.只是对象可以变化.理解这一点很重要.例如:

public void addHour(Date date) {
  date.setTime(date.getTime() + 3600 * 1000);
}
Run Code Online (Sandbox Code Playgroud)

日期按值传递但是Date可变,因此可以修改但尝试执行此操作:

public void addHour(Date date) {
  date = new Date(date.getTime() + 3600 * 1000);
}
Run Code Online (Sandbox Code Playgroud)

它不会改变日期.为什么?因为date是引用,但是按值传递.

其次,这些双打是否以某种方式相互关联?如果是这样将它们包装在类中而不是描述这种关系,如:

public class Coordinate {
  private final double x;
  private final double y;

  public Coordinate(double x, double y) {
    this.x = x;
    this.y = y;
  }

  public double getX() { return x; }
  public double getY() { return y; }
}
Run Code Online (Sandbox Code Playgroud)

  • 不不不不不!所有变量都通过Java中的值传递.基元按值传递,指向对象的指针按值传递.没有什么是_ever_真正通过引用传递.事实证明,如果不"返回"这两个值,就无法在Java中编写交换方法. (2认同)