/ ** * 2つのExchange数の基準値がどのように処理することによって送信 * * @authorのzhuliang * @date 2019年7月14日10時39分 * / パブリック クラスSwapValueDemo { 公共 静的 ボイドメイン(文字列[]引数)がスロー{例外 整数 = 1 ; 整数B = 2 ; のSystem.out.println( "交換前=" + + A "B =" + ; B) スワップ(A、B) のSystem.out.println(「交換後= "+ + A"、B =「+ B); } / ** * 2つの例示的なスイッチングのエラーの数 * * @param *の@paramのB * / プライベート 静的 ボイドfalseSwap(整数、整数B){ int型の TEMP = A; A = B; B = TEMP; } / ** * 2つの数のスイッチング値を反映して *結果 *交換1 = Aの前に、B = 2 * 2 =交換Aの後に、B = 2 *これはなぜそうでしょうか? * <P> *キャッシング機構整数があるため * { @link Integer.IntegerCache.low = -128} * { @link Integer.IntegerCache.high} = 127 = 1、B = 2ため*が INTの温度で* = a.intValue();この行は、1の取得した値は、キャッシュ内に存在します (B)value.setに*;この行の後に、値2 a.intValueは、基本データ型のため、アドレス自体が値を表すことができ、単に一時値をもたらすことにもなる2 * *その後(B、TEMP)value.setを呼び出し、時間が2 Bに割り当てられます 最終結果は、B = 2 SO * 2 = Aであり、 * <P> *二つの方法があり、この問題を解決する * 1つの値は、A、Bは、トランスデューサ127未満又は-128より大きい数でないように我々は、キャッシュ機構整数使用 新しいアドレスを取得する新しい整数の一時的に割り当てが、ときに使用* 2 * * @param *の@paramのB * / プライベート静的が無効スワップ(整数、整数B)はスロー{例外 値フィールド、 =整数。クラス ( "値" .getDeclaredField )。 value.setAccessible(真); // int型のTEMP = a.intValue(); 整数TEMP = 新しい整数(a.intValue()); value.set(a、b)は、 value.set( B、TEMP); } }