【小家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);
}
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);
}
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);
}
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以后是加了很多安全性的东西的。若想了解更多,可以点击上面的 推荐阅读