【小家java】交换两个变量数值的方法(四种方法)
相关阅读
【小家java】java5新特性(简述十大新特性) 重要一跃
【小家java】java6新特性(简述十大新特性) 鸡肋升级
【小家java】java7新特性(简述八大新特性) 不温不火
【小家java】java8新特性(简述十大新特性) 饱受赞誉
【小家java】java9新特性(简述十大新特性) 褒贬不一
【小家java】java10新特性(简述十大新特性) 小步迭代
【小家java】java11新特性(简述八大新特性) 首个重磅LTS版本
前言
本文主要介绍Java中可以交换两个变量的值的四种方法,可能开发者们在平时的coding中都有遇到过类似的情况,咋一看并不难。但本博文其实就是开开眼界而已,自己玩还行。
若你是一个注重代码设计效率,和优雅编程的人,或者本文能够和你一起探讨,产生共鸣。
四种方式
方式一:采用一个中间变量 优点:最简单最好理解的方式
public static void main(String[] args) {int x = 10, y = 20; //定义两个变量System.out.println("交换前 x=" + x + ",y=" + y);int temp = x;x = y;y = temp;System.out.println("交换前 x=" + x + ",y=" + y);}
方式二:可以用两个数求和然后相减的方式 缺点:如果 x 和 y 的数值过大的话,超出 int 的值会损失精度。
public static void main(String[] args) {int x = 10, y = 20; //定义两个变量System.out.println("交换前 x=" + x + ",y=" + y);x = x + y; //x = 30y = x - y; //y = 10x = x - y; //x = 20System.out.println("交换前 x=" + x + ",y=" + y);}
方式三:利用位运算的方式进行数据的交换,思想原理是:一个数异或同一个数两次,结果还是那个数,而且不会超出int范围(最佳实现)
public static void main(String[] args) {int x = 10, y = 20; //定义两个变量System.out.println("交换前 x=" + x + ",y=" + y);x = x ^ y; //x = 30y = x ^ y; //y = 10x = x ^ y; //x = 20System.out.println("交换前 x=" + x + ",y=" + y);}
方式四:利用反射 最为麻烦,切效率低。完全炫技使用
public static void main(String[] args) {int x = 10, y = 20; //定义两个变量System.out.println("交换前 x=" + x + ",y=" + y);swap(x, y);System.out.println("交换前 x=" + x + ",y=" + y);}private static void swap(Integer a, Integer b) {int temp = a;try {Class clazz = a.getClass();Field value = clazz.getDeclaredField("value");value.setAccessible(true);value.setInt(a, b);value.setInt(b, temp);} catch (Exception ex) {ex.printStackTrace();}}
所有的运行结果都如下:
交换前 x=10,y=20
交换前 x=10,y=20
但是这里插一句,方式四,通过反射交换时,如果用Java8运行,就是上面的内容。如果用Java10运行如下:
交换前 x=10,y=20
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.sayabc.boot2demo1.service.UserService (file:/D:/work/remotegitcheckoutproject/myprojects/java/boot2-demo1/target/classes/) to field java.lang.Integer.value
WARNING: Please consider reporting this to the maintainers of com.sayabc.boot2demo1.service.UserService
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
交换前 x=10,y=20
很明显多了不少警告信息,因此可见Java9以后是加了很多安全性的东西的。若想了解更多,可以点击上面的 推荐阅读
关注A哥
Author | A哥(YourBatman) |
---|---|
个人站点 | www.yourbatman.cn |
yourbatman@qq.com | |
微 信 | fsx641385712 |
活跃平台
|
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
公众号 | BAT的乌托邦(ID:BAT-utopia) |
知识星球 | BAT的乌托邦 |
每日文章推荐 | 每日文章推荐 |
【小家java】交换两个变量数值的方法(四种方法)相关推荐
- php比较两个变量的值_总结PHP不用第三个变量交换两个变量的值的几种方法
"PHP不用第三个变量交换两个变量的值"这个题看到过好多次了,看来面试确实喜欢考这道题.今天,对于这个题目,我自己总结了几种方法,可能不全,大家来互相补充. 有些仅适用于字符串,方 ...
- 交换两个变量的值的4种方法,你了解了吗?
目录 一.引入第三变量 二.不引入第三变量 1.a = a + b; b = a - b; a = a - b; 2.利用异或 3.巧妙运用优先级 总结: 在我们的开发中,或者在我们平时的练习中,常常 ...
- 初学者交换两个变量的值的三种方法
一.通过简单运算交换两个变量的值 #include<stdio.h> int main() {int i = 5, j = 6;i = i + j;j = i - j;i = i - j; ...
- Java求两集合中元素交集的四种方法对比总结
hello,你好呀,我是灰小猿,一个超会写bug的程序猿! 最近在做项目的时候有用到对两个集合中的元素进行对比求其交集的情况,因为涉及到的数据量比较大,所以在进行求两个集合中元素交集的时候,就应该考虑 ...
- 【C语言】交换两个变量的值 的n种方法
文章目录 方法一 借助第三方 方法二 变量自加减 方法三 巧用异或位运算 方法一 借助第三方 借助第三方临时储存一个变量的值,是我们最常用的方法.这个方法不仅可以交换两个整数,任意类型的两个变量交换, ...
- 交换两个变量的值的三种方法
方法一:定义临时变量法 运用此方法比较简单 public class 定义临时变量 {public static void main(String[] args) {int v1=1;int v2=2 ...
- 交换两个变量的值(4种方法)
第一种,最简单最常用的. #include<stdio.h> int main() {int a=1,b=2; int c; c=a;a=b;b=c; printf("%d,%d ...
- 【转】Java中字符串中子串的查找共有四种方法(indexof())
原文网址:http://wfly2004.blog.163.com/blog/static/1176427201032692927349/ Java中字符串中子串的查找共有四种方法,如下: 1.int ...
- Java中字符串中子串的查找共有四种方法(indexof())
2019独角兽企业重金招聘Python工程师标准>>> public class FirstDemo { /** *API中String的常用方法 */ // 查找指定字符串是否存在 ...
最新文章
- 计算同比 环比_PowerBI学习教程(三)时间累积同比环比计算
- docker网络配置方法总结
- 省二计算机二级vb程序设计题,江苏省计算机二级考试VB程序设计复习题(分类汇总)...
- C++中void和void*指针的含义 (指针类型的含义)
- 面向过程和面向对象的联系和区别
- python语法基础知识案例_Python 语法速览与实战清单
- 数据库高级知识——查询截取分析(二)
- iPhone 13贴膜渲染图曝光:近几代外观最大升级
- 波卡跨链交易协议RAI Finance将接入Bounce Finance实现IDO代币发行
- 手机上删掉的照片怎么找回来?
- 性能测试中的jvm监控
- vue+element PC系统自适应
- 小米 gps信号测试软件,实时查看,防走丢神器:小米 米兔GPS定位器 防盗跟踪器 使用评测...
- php开启sockets模块,独立编译php的sockets模块
- 地图作业平台低代码实战(搭建能力提升)
- 【办公常用软件】万彩办公大师教程丨PDF OCR 帮助文档
- day17--途牛旅游项目-激活功能
- Python中num += 1的意思
- 索尼(SONY)笔记本装系统蓝屏问题解决方案
- 安装Apache服务