交換兩個局部變量Integer的值
阿新 • • 發佈:2017-10-14
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的值