1. 程式人生 > >交換兩個局部變量Integer的值

交換兩個局部變量Integer的值

sys mem spa stat red cep java語言 odi integer

反射是很強大的,誰說的final修飾的就不能改變,

通過反射獲取成員變量,之後可以取消訪問修飾符,也就是說private的也可以訪問,

在修改常量(final修飾的),之後就可以對其做任何操作了

如下,通過一個方法交換兩個Integer對象的值:

package ni.jun.yang.test;

import java.lang.reflect.Field;
import java.lang.reflect.Modifier;

public class Test {

    public static void main(String[] args) {
        Integer a 
= 10; Integer b = 20; System.out.println("交換前:a="+a+",b="+b); change(a,b); System.out.println("交換後:a="+a+",b="+b); } public static void change(Integer a, Integer b) { // System.out.println("交換後:a="+b+",b="+a); // System.exit(0); try
{ Field field = Integer.class.getDeclaredField("value"); field.setAccessible(true); //取消訪問修飾符 //public final class Field extends AccessibleObject implements Member //值為 true 則指示反射的對象在使用時應該取消 Java語言訪問檢查。 //值為 false 則指示反射的對象應該實施 Java語言訪問檢查。
//修改常量(final) Field modifiersField = Field.class.getDeclaredField("modifiers"); modifiersField.setAccessible(true); modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL); //交換 int temp = b; field.set(b, a); field.set(a, new Integer(temp)); } catch (Exception e) { e.printStackTrace(); } } }

交換兩個局部變量Integer的值