まず、C言語でのスワップ関数の設計を確認しましょう
値渡し:2つの数値を根本的に交換することはできません
#include <stdio.h> void swap(int a、int b){ int temp; temp = a; a = b; b = 一時; }
参考文献:C言語では、アドレスを呼び出す必要があります
#include <stdio.h> void swap(int&a、int&b){ int temp; temp = a; a = b; b = 一時; }
それが問題です。Javaにはポインタがなく、通常の変数への参照もありません。通常のタイプの変数への参照を渡すにはどうすればよいですか?
方法1:配列を使用する
public static void swap(int [] data、int a、int b){ int temp; temp = data [a]; data [a] = data [b]; data [b] = temp; }
方法2(誤解を招く):JavaのパッケージクラスIntegerを介して参照を渡します。結果:失敗。Javaのパッケージクラスはデータフィールドを変更できないため、個人的に理解します。Javaは、参照であるパッケージクラスの整数データアドレスを提供しません。しかし、表面データを提供する
方法3:独自のパッケージクラスMyIntegerを定義する
静的 クラス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); }
方法4:外部インライン、このクラスを直接使用
パブリック クラス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 = 一時; } }
上記、個人的な参照
:https://blog.csdn.net/dadoneo/article/details/6577976