设为首页 加入收藏

TOP

使用Java反射交换两个整型变量的值
2018-05-21 15:48:28 】 浏览:91
Tags:使用 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一样


    }
}


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇14行JavaScript教你使用WebAssemb.. 下一篇Python绘图之matplotlib基本语法

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目