【小家java】交换两个变量数值的方法(四种方法)

您所在的位置:网站首页 编写代码实现两个变量值交换的方法 【小家java】交换两个变量数值的方法(四种方法)

【小家java】交换两个变量数值的方法(四种方法)

2024-05-09 00:27| 来源: 网络整理| 查看: 265

前言

本文主要介绍Java中可以交换两个变量的值的四种方法,可能开发者们在平时的coding中都有遇到过类似的情况,咋一看并不难。但本博文其实就是开开眼界而已,自己玩还行。

若你是一个注重代码设计效率,和优雅编程的人,或者本文能够和你一起探讨,产生共鸣。

四种方式方式一:采用一个中间变量 优点:最简单最好理解的方式代码语言:javascript复制 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 的值会损失精度。代码语言:javascript复制public static void main(String[] args) { int x = 10, y = 20; //定义两个变量 System.out.println("交换前 x=" + x + ",y=" + y); x = x + y; //x = 30 y = x - y; //y = 10 x = x - y; //x = 20 System.out.println("交换前 x=" + x + ",y=" + y); }方式三:利用位运算的方式进行数据的交换,思想原理是:一个数异或同一个数两次,结果还是那个数,而且不会超出int范围(最佳实现)代码语言:javascript复制 public static void main(String[] args) { int x = 10, y = 20; //定义两个变量 System.out.println("交换前 x=" + x + ",y=" + y); x = x ^ y; //x = 30 y = x ^ y; //y = 10 x = x ^ y; //x = 20 System.out.println("交换前 x=" + x + ",y=" + y); }方式四:利用反射 最为麻烦,切效率低。完全炫技使用代码语言:javascript复制 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(); } }

所有的运行结果都如下:

代码语言:javascript复制交换前 x=10,y=20 交换前 x=10,y=20

但是这里插一句,方式四,通过反射交换时,如果用Java8运行,就是上面的内容。如果用Java10运行如下:

代码语言:javascript复制交换前 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以后是加了很多安全性的东西的。若想了解更多,可以点击上面的 推荐阅读



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3