【问题标题】:Why Java doesn't supply a simple swap function? [closed]为什么 Java 不提供简单的交换功能? [关闭]
【发布时间】:2012-03-19 21:02:54
【问题描述】:

每次我想交换两个值时,我都必须使用临时来进行实际交换。 为什么 Java 没有在任何类中为我们提供一个工具方法来简单地交换两个变量的值?

【问题讨论】:

  • 那么问题是什么?为什么Java没有什么东西呢?询问 java 创建者。
  • @Ademiban 纠正你的语法。
  • 不记得上一次我必须在真实代码中交换值是什么时候......(除了发布到 SO 的代码 sn-ps ;))
  • @Andreas_D - 有人可能会争辩说,您不记得的原因是您下意识地忽略了需要swap 的“解决方案”。 :-)

标签: java pass-by-reference swap pass-by-value


【解决方案1】:

Java 是 Pass-by-Value。这就是为什么你不能创建一个简单的交换方法(ref)


但是,您可以将引用包装在另一个对象中并交换内部引用:

public static void main(String[] args) {
    Ref<Integer> a = new Ref<Integer>(1);
    Ref<Integer> b = new Ref<Integer>(2);

    swap(a, b);

    System.out.println(a + " " + b); // prints "2 1"
}

public static <T> void swap(Ref<T> a, Ref<T> b) {
    T tmp = a.value;
    a.value = b.value;
    b.value = tmp;
}

static class Ref<T> {
    public T value;

    public Ref(T t) {
        this.value = t;
    }

    @Override
    public String toString() {
        return value.toString();
    }
}

【讨论】:

    【解决方案2】:

    Java 不提供这种方法,因为它是不可能的。 变量按值传递给方法。是的,即使这些是对象。在这种情况下,我们通过值传递对对象的引用。因此,您不能在接收此变量作为参数的方法内更改源变量的值:

    int a = 5;
    int b = 6;
    swap(a, b);
    // a is still 5, b is still 6!
    
    
    void swap(int first, int second) {
        int tmp = first;
        first = second;
        second = tmp;
    }
    

    【讨论】:

    • 正如在其他地方提到的,这可以通过将要交换的值包装在一个对象中来轻松完成。
    猜你喜欢
    • 1970-01-01
    • 2019-03-08
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多