java 反射实现2个int变量值的交换

 

import java.io.*;
import java.lang.reflect.Field;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
class test
{

public static void main(String []args) {
Integer a = 1000;

Integer b = 2000;

swap(a, b); //实现该函数,使得a,b的值交换

Integer c=1000;

System.out.println(a + "-" + b + "-" + a.getClass()+" c:"+c);   //2000-1000-class java.lang.Integer  c:1000

/*如果a=1,b=2,c=1则输出结果中的c会变成2,原因参考Interger缓存(-128到127),修改了缓存里的值导致1变成2了*/

}

static void swap(Integer a, Integer b) {
 int temp = a;

try {
Class clazz = a.getClass();
Field value = clazz.getDeclaredField("value");
value.setAccessible(true);
value.setInt(a, b);
value.setInt(b, temp);
} catch (Exception ex) {
ex.printStackTrace();
}


}

 http://www.blogjava.net/sundc/archive/2013/06/08/400382.html

From:https://www.cnblogs.com/xuejianxiyang/p/9155397.html

posted @ 2018-06-08 14:13  Ace001  阅读(1339)  评论(0编辑  收藏  举报