シンプルだが深いインタビューの質問:どのように2つの数の交換価値法による

/ ** 
 * 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); 
    } 

}

 

おすすめ

転載: www.cnblogs.com/lezon1995/p/11183656.html