使用反射交换a,b的值

来源:互联网 发布:淘宝ashford 编辑:程序博客网 时间:2024/06/07 08:01
package aa;

import java.lang.reflect.Field;

import org.omg.CORBA.INTERNAL;

public class aa {
    public static void main(String[] args) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
        Integer a=1,b=2;
        System.out.println("交换之前:a"+a+"b"+b);
        swap(a,b);
        System.out.println("交换之后:a"+a+"b"+b);
    }

    private static void swap(Integer a, Integer b) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
        // TODO Auto-generated method stub
        Field field = Integer.class.getDeclaredField("value");
        field.setAccessible(true);
        Integer tmp = new Integer(a.intValue());
        field.set(a, b.intValue());
        field.set(b, tmp);
    }
    

}


使用到的知识点


1. 函数调用的值类型和引用类型传递

2. 装箱、拆箱  Integer a = Integer.valueof(1)  a.intValue()

3. 反射的可访问性

4. Integer -128 127 初始化缓存

  Boolean:(全部缓存)

·  Byte:(全部缓存)

·  

·  Character(<= 127缓存)

·  Short(-128 — 127缓存)

·  Long(-128 — 127缓存)

·  

·  Float(没有缓存)

·  Doulbe(没有缓存)



0 0
原创粉丝点击