在Java中我们所使用的实例变量其实都是一个引用,所以如果要求实现一个swap(String A, String B)这种函数时无法实现的,因为在类方法的定义中是先对行参进行地址传递,然后对形参修改,所以对原来的变量不产生影响. 一种实现方法是不使用方法传递参数,直接交换,另一种有趣的方式是使用Java的反射来实现 import java.lang.reflect.*; public class SwapStr { public static void swap(String str1, Str…
在 Java 中不使用多余变量交换两个字符串 public class Test { public static void main(String[] args) { String a = "Hello"; String b = "World"; System.out.println("Strings before swap: a = " + a + " and b = " + b); a = a + b; b = a.sub…
第一种:添加中间变量,算是最经典最简易的一种了. //添加一个中间变量 int x = 1, y = 2; int z; z = x;x = y;y = z; System.out.println(x+","+y); 虽说是最容易想到的一种,但是不建议使用,原因无他,太low. 第二种,通过加减实现. //加减 x = 1;y = 2; x = x + y; y = x - y; x = x - y; System.out.println(x+","+y); 第三…
错误示范 1. 直接交换 public class SwapNumbers { // 直接交换 public static void swap(int a, int b) { int temp = a; a = b; b = temp; }; public static void main(String[] args) { int a = 10; int b = 20; System.out.println("交换前: a = " + a + ": b = " +…
网上看了一些使用异或交换两数,不是很好理解.现在写一下自己的理解. 首先是 异或原则,对于任意 x: x ^ x == 0; x ^ 0 == x; 思路: 根据原则,可以得到两个公式: 求a: a^b^a=b 求b: a^b^b=a 交换两个数: 定义两个数:a b a = a ^ b; // 保存 a ^ b 的结果 b = a ^ b; --> a ^ b ^ b = a // 根据公式发现,这一步求的是a,只是用b接收了 a = a ^ b; …
反射是很强大的,谁说的final修饰的就不能改变, 通过反射获取成员变量,之后可以取消访问修饰符,也就是说private的也可以访问, 在修改常量(final修饰的),之后就可以对其做任何操作了 如下,通过一个方法交换两个Integer对象的值: package ni.jun.yang.test; import java.lang.reflect.Field; import java.lang.reflect.Modifier; public class Test { public static…