手机版
你好,游客 登录 注册
背景:
阅读新闻

使用Java反射交换两个整型变量的值

[日期:2018-05-10] 来源:Linux社区  作者:cq-yangzhou [字体: ]

在一次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一样

    }
}

本文永久更新链接地址https://www.linuxidc.com/Linux/2018-05/152318.htm

linux
相关资讯       Java反射  交换两个整型变量的值 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款