zoukankan      html  css  js  c++  java
  • Java反射交换两个整型变量的值

      在一次面试中,做了这么一道题"交换两个整型变量的值",当时看到这个题目之后,会心一笑,这也太简单了--直接使用中间变量交换不就可以了吗?但是,面试官却说不需要返回值,
    在调用的地方,再次输出变量的值,我就不知道了,于是,他提示我用反射。思考了良久,就写了下面的代码。
    package com.yzh.study.fanshe;
    
    import java.lang.reflect.Field;
    
    /**
     * author:yangzhou
     * time: 2018/5/9 15:55
     * description: 通过反射交换两个变量的值
     **/
    public class Swap {
        public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {
            Integer a = 2;
            Integer b=4;
            System.out.println("a="+a+","+"b="+b);//a=2,b=4
            swap(a,b);
            System.out.println("a="+a+","+"b="+b);//a=4,b=2
        }
    
        /**
         * 开始交换,只能使用integer类型
         * @param a
         * @param b
         * @throws NoSuchFieldException
         * @throws IllegalAccessException
         */
        private static  void swap(Integer a,Integer b) throws NoSuchFieldException, IllegalAccessException {
            int temp = a;//暂存a的值,否者后面将造成a,b的值相同
            Class<Integer> integerClass = Integer.class;
            Field value = integerClass.getDeclaredField("value");
            value.setAccessible(true);
            value.setInt(a,b);
            value.setInt(b,temp);//经过测试,不能使用value.set(b,temp),否者,b的值也将变成和a一样
    
        }
    }
  • 相关阅读:
    生产环境常见的几种JVM异常
    JVM垃圾回收时如何确定垃圾?是否知道什么是GCRoots?
    你平时工作用过的JVM常用基本配置参数有哪些?
    java X参数
    JUC之CAS
    JUC之List集合
    JUC之lock
    JUC之volatile
    BZOJ2132: 圈地计划
    BZOJ3991: [SDOI2015]寻宝游戏
  • 原文地址:https://www.cnblogs.com/cq-yangzhou/p/9018106.html
Copyright © 2011-2022 走看看