/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args ) throws NoSuchFieldException, IllegalAccessException {
Integer i1=Integer.valueOf(123);
Integer i2=456;
System.out.println("i1="+i1+"---i2="+i2);
ff(i1,i2);
System.out.println("i1="+i1+"---i2="+i2);
}
public static void ff(Integer i1,Integer i2) throws NoSuchFieldException, IllegalAccessException {
Field field = Integer.class.getDeclaredField("value");
field.setAccessible(true);
Integer tem=new Integer(i1);
field.set(i1,i2);
field.set(i2,tem);
}
}
"C:\Program Files\Java\jdk1.8.0_121\bin\java"
i1=123---i2=456
i1=456---i2=123
Process finished with exit code 0
在Integer 中的value范围是-127~128之间,相同数据引用是相等的。
Integer 中,value字段是保存数据字段,并且用final修饰,只能在初始化的时候写入值。之后不能再修改了。
通过反射我们可以打破这现象,把引用地址进行修改。