交换基本数据类型的方法swap,并影响到主方法
不知道朋友在哪里看到的问题,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,并影响到主方法的更多相关文章
- Java之面向对象概述,类,构造方法,static,主方法,对象
一.面向对象概述 面向过程 "面向过程"(Procedure Oriented)是一种以过程为中心的编程思想.这些都是以什么正在发生为主要目标进行编程,不同于面向对象的是谁在受影响 ...
- Spring中声明式事务的注解@Transactional的参数的总结(REQUIRED和REQUIRES_NEW的与主方法的回滚问题)
一.事务的传播行为1.介绍 当事务方法被另一个事务方法调用时,必须指定事务应该如何传播.例如:方法可能继续在现有事务中运行,也可能开启一个新事务,并在自己的事务中运行.2.属性 事务的传播行为可以由传 ...
- 怎样理解JAVA的“构造方法”和“主方法”
在类中除了成员方法之外,还存在一种特殊类型的方法,那就是构造方法.主方法是类的入口点,它定义了程序从何处开始: 主方法提供对程序流向的控制,Java编译器通过主方法来执行程序.那么,下面一起来看一下关 ...
- Java基础语法 - 面向对象 - 类的主方法main方法
主方法是类的入口点,它指定了程序从何处开始,提供对程序流向的控制.Java编译器通过主方法来执行程序. 主方法的语法如下: /* a.主方法是静态的,如果要直接在主方法中调用其它方法,则该方法必须也是 ...
- linux中增加swap分区文件的步骤方法
一.swap交换分区 Swap分区在系统的物理内存不够用的时候,把硬盘空间中的一部分空间释放出来,以供当前运行的程序使用.那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临 ...
- Python的五大数据类型的作用、定义方式、使用方法
一.简述Python的五大数据类型的作用.定义方式.使用方法: 1. 数字类型int: 1.整形 作用:可以表示人的年龄,身份证号码,身高和体重等 定义方式: weight = 130 print( ...
- SQLServer数据类型优先级对性能的影响
原文:SQLServer数据类型优先级对性能的影响 译自: http://www.mssqltips.com/sqlservertip/2749/sql-server-data-type-preced ...
- Linode VPS主机套餐方案降低处理方法且不影响数据
使用Linode VPS主机产品经历过512MB内存升级至1GB内存,再升级至2GB内存,以及目前推出1GB内存方案月付10美元.比如我们在使用Linode 2GB内存方案的时候占用资源不是太多,其实 ...
- python基本数据类型list,tuple,set,dict用法以及遍历方法
1.list类型 类似于java的list类型,数据集合,可以追加元素与删除元素. 遍历list可以用下标进行遍历,也可以用迭代器遍历list集合 建立list的时候用[]括号 import sys ...
随机推荐
- storm从入门到放弃(三),放弃使用《StreamId》特性。
序:StreamId是storm中实现DAG有向无环图的重要一个特性,但是从实际生产环境来看,这个功能其实蛮影响生产环境的稳定性的,我们系统在迭代时会带来整体服务的不可用. StreamId是stor ...
- JavaScript语言精粹-读书笔记
前言:很久之前读过一遍该书,近日得闲,重拾该书,详细研究一方,欢迎讨论指正. 目录: 1.精华 2.语法 3.对象 4.函数 5.继承 6.数组 7.正则表达式 8.方法 9.代码风格 10.优美的特 ...
- 利用dbutils工具实现数据的增删查改操作(dbutis入门)
一.前期准备 1.安装数据库(如:mysql5.5) 2.安装Eclipse(如:3.4) 3.下载数据库驱动包 4.下载dbutis工具包 5.在Eclipse创建名为 dbutils 的工程并在工 ...
- 【.net 深呼吸】导出 Office 文档中的图片
我们常用的 Office 文档其实就三种——Word.Excel.PowerPoint,分别对应的扩展名为:.docx..pptx..xlsx. 许多教程都告诉我们,要提取这些文件中的图片(其实像视频 ...
- Oracle中dblink如何使用
Oracle中dblink应用小结Oracle应用服务器OS 1.查看数据库的global_name SELECT * FROM GLOBAL_NAME; 2.查看global ...
- setTimeout 与 Event Loop 浅析
先从一个小题目开始: 以下代码的输出结果是? function test1 () { console.log(1) }; setTimeout(test1, 1000); // T1-1setTime ...
- Loadrunner常见错误处理方法
1.错误 -26601: 解压缩函数(wgzMemDecompressBuffer)失败,返回代码=-5 (Z_BUF_ERROR).inSize=0.inUse=0.outUse=0 用LR做压力测 ...
- 网站pv统计脚本
在平时的运维工作中,我们运维人员需要清楚自己网站每天的总访问量.总带宽.ip统计和url统计等.虽然网站已经在服务商那里做了CDN加速,所以网站流量压力都在前方CDN层了像每日PV,带宽,ip统计等数 ...
- python基础===Python 代码优化常见技巧
Python 代码优化常见技巧 代码优化能够让程序运行更快,它是在不改变程序运行结果的情况下使得程序的运行效率更高,根据 80/20 原则,实现程序的重构.优化.扩展以及文档相关的事情通常需要消耗 8 ...
- DVWA笔记之一:brute Force
1.Low 级别 burpsuite抓包 low级别是使用GET请求进行登录,将其发送到Intruder中,并增加password变量 之后选择字典开始攻击. 暴力破解完成后,查看结果RESULT,根 ...