1. 程式人生 > >Java中的swap函式

Java中的swap函式

首先,我們來回顧下C語言中的swap函式設計

傳值://不能從根本上交換兩數

#include <stdio.h>

void swap(int a, int b) {

int temp;

temp = a; a = b; b = temp;

}

傳引用://在C語言中,應該稱地址

#include <stdio.h>

void swap(int &a, int &b) {

int temp;

temp = a; a = b; b = temp;

}

那問題來了,java中沒有指標的說法,對普通變數也沒有引用,那我們要怎麼對普通型別的變數進行引用傳遞呢?

方法一:利用陣列

public static void swap(int[] data, int a, int b) {

int temp;

temp = data[a]; data[a] = data[b]; data[b] = temp;

}

方法二(誤導):通過java中的包裝類Integer進行引用傳遞,結果:失敗,因為java中的包裝類不允許改變資料域,個人理解為:java不會提供包裝類Integer資料地址,即引用,而是提供表面資料

方法三:定義自己的包裝類MyInteger

static class MyInteger { private int x; public MyInteger(int x) {

this.x = x; } public int getValue(){ return x; } public void changeValue(int x) { this.x = x; } }

public static void swap(MyInteger a, MyInteger b) { int t = a.getValue(); a.changeValue(b.getValue()); b.changeValue(t); }

方法四:外部內聯,直接利用本類

  public class Sort {
      int a, b;
      public Sort(int a, int b) {
          this.a = a;
          this.b = b;
      }
      public void swap() {
          int temp;
          temp = a; a = b; b = temp;
      }
  }