不知道朋友在哪里看到的问题,qq来问我,题目是:在不修改主方法的前提下使用一个方法交换两个int的值,方法如下:

    public static void main(String[] args) {
Integer a = 1;
Integer b = 2;
System.out.println("交换前:a="+a+",b="+b);
swap(a,b);
System.out.println("交换后:a="+a+",b="+b);
} /**
* 交换方法
* @param a
* @param b
*/
public static void swap(int a,int b){ }

swap可以随意修改,但是主方法不能动。

看题目想也没想直接写了一个方法,写完运行结果还是没变,代码如下:

     public static void swap(int a,int b){
int temp = a;
a = b;
b = temp;
}

发现我们修改的值,与原来的实际值并不相同。于是尝试使用反射修改。

说做就做,首先遍历出了所有的字段

         Field[] f = Integer.class.getDeclaredFields();
for(int i=0;i<f.length;i++){
System.out.println(f[i].getName());
}

结果如下

MIN_VALUE,MAX_VALUE,TYPE,digits,DigitTens,DigitOnes,sizeTable,value,SIZE,BYTES,serialVersionUID

发现其中有个value字段,发现值就存在该字段中,于是使用反射来改变该字段的值

     public static void swap(int a,int b){
try {
int temp = a;//临时变量
Field f = Integer.class.getDeclaredField("value");//获取integer存放值的value
f.setAccessible(true);//去除private限制
f.setInt(a, b);
f.setInt(b, temp);
} catch (Exception e) {
e.printStackTrace();
}
}

执行结果

交换前:a=1,b=2
交换后:a=2,b=1

成功!

交换基本数据类型的方法swap,并影响到主方法的更多相关文章

  1. Java之面向对象概述,类,构造方法,static,主方法,对象

    一.面向对象概述 面向过程 "面向过程"(Procedure Oriented)是一种以过程为中心的编程思想.这些都是以什么正在发生为主要目标进行编程,不同于面向对象的是谁在受影响 ...

  2. Spring中声明式事务的注解@Transactional的参数的总结(REQUIRED和REQUIRES_NEW的与主方法的回滚问题)

    一.事务的传播行为1.介绍 当事务方法被另一个事务方法调用时,必须指定事务应该如何传播.例如:方法可能继续在现有事务中运行,也可能开启一个新事务,并在自己的事务中运行.2.属性 事务的传播行为可以由传 ...

  3. 怎样理解JAVA的“构造方法”和“主方法”

    在类中除了成员方法之外,还存在一种特殊类型的方法,那就是构造方法.主方法是类的入口点,它定义了程序从何处开始: 主方法提供对程序流向的控制,Java编译器通过主方法来执行程序.那么,下面一起来看一下关 ...

  4. Java基础语法 - 面向对象 - 类的主方法main方法

    主方法是类的入口点,它指定了程序从何处开始,提供对程序流向的控制.Java编译器通过主方法来执行程序. 主方法的语法如下: /* a.主方法是静态的,如果要直接在主方法中调用其它方法,则该方法必须也是 ...

  5. linux中增加swap分区文件的步骤方法

     一.swap交换分区 Swap分区在系统的物理内存不够用的时候,把硬盘空间中的一部分空间释放出来,以供当前运行的程序使用.那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临 ...

  6. Python的五大数据类型的作用、定义方式、使用方法

    一.简述Python的五大数据类型的作用.定义方式.使用方法: 1. 数字类型int: 1.整形 作用:可以表示人的年龄,身份证号码,身高和体重等 定义方式:  weight = 130 print( ...

  7. SQLServer数据类型优先级对性能的影响

    原文:SQLServer数据类型优先级对性能的影响 译自: http://www.mssqltips.com/sqlservertip/2749/sql-server-data-type-preced ...

  8. Linode VPS主机套餐方案降低处理方法且不影响数据

    使用Linode VPS主机产品经历过512MB内存升级至1GB内存,再升级至2GB内存,以及目前推出1GB内存方案月付10美元.比如我们在使用Linode 2GB内存方案的时候占用资源不是太多,其实 ...

  9. python基本数据类型list,tuple,set,dict用法以及遍历方法

    1.list类型 类似于java的list类型,数据集合,可以追加元素与删除元素. 遍历list可以用下标进行遍历,也可以用迭代器遍历list集合 建立list的时候用[]括号 import sys ...

随机推荐

  1. css鼠标样式cursor

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. File的getParentFile()和getParent()

    代码:      File file = new File("D:\\javaemp\\code\\java.txt");      String str1 = file.getP ...

  3. HDU 6033 Add More Zero (数学)

    Description There is a youngster known for amateur propositions concerning several mathematical hard ...

  4. 分布式事务,EventBus 解决方案:CAP【中文文档】

    前言 很多同学想对CAP的机制以及用法等想有一个详细的了解,所以花了将近两周时间写了这份中文的CAP文档,对 CAP 还不知道的同学可以先看一下这篇文章. 本文档为 CAP 文献(Wiki),本文献同 ...

  5. hdu--1013--Digital Roots(字符串)

    Digital Roots Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  6. 修复intellij idea 2017.2中文输入法无候选框,亲测可以用

    注:要说用搜狗拼音8.6版本不会出现这问题.使用拼音的可以去下载安装试一下.用五笔的就可以使用本方法修复,本人就是使用五笔的. 完美解决中文输入法的问题.出现bug的原始是jb自己编译的openjdk ...

  7. bootstrap&NPM淘宝代理镜像

    box-shadow 属性向框添加一个或多个阴影. < box-shadow: h-shadow v-shadow blur spread color inset; h-shadow必需.水平阴 ...

  8. Mac 如何优雅的使用Microsoft office

    近期要使用文档编辑,但是发现mac下的pages实在不好用,或者说是不习惯,想安装个office  发现官方的office 都基本上要收费,网上的多数都要激活.实在没办法(没钱),看看WPS ,结果w ...

  9. MySQL中的数据类型及创建

    MySQL创建: 1.创建数据库create database test2; 2.删除数据库drop database test2;3.创建表create table ceshi(    ids in ...

  10. sqlserver-4064

    早上忘记了SQLServer的sa帐户密码,在网上搜索才弄清楚了解决办法:1.在SQLServer企业管理器中输入以下命令:ALTER LOGIN sa ENABLE GO ALTER LOGIN s ...