Jamers Posted April 13, 2019 Report Share Posted April 13, 2019 这个问题原来是C++的版本,目前在学习Java中,问题就用Java描述吧。 看代码:将变量a 和 b的值交换后输出。当然实际情况下,肯定不允许这样的情况发生,如果可以传指参的话,直接使用指参就可以了,比如PHP里可以直接使用 function doSwap(&$a, &$b) {...} 就可以了,我查了一下JAVA是没有指参的,所以不能这么处理。代码中还有部分不是太理解,逻辑是理解了,等后续再看吧。 public class Main { public static void main(String[] args) { Integer a, b; a = 1; b = 2; System.out.printf("a = %d, b = %d\n", a, b); try { doSwap(a, b); } catch (Exception e) { System.out.println(e.toString()); } System.out.printf("a = %d, b = %d\n", a, b); } private static void doSwap(Integer a, Integer b) throws Exception { // 请在这里实现交换过程 } } 我这里先给出一个PHP版本的解法,不使用Class的情况是可以实现的,如果限制在Class环境中,暂时还没想到实现方式,PHP中没有内存操作的概。: $a = 10; $b = 20; echo "a:{$a} b:{$b}\n"; doSwap($a, $b); echo "a:{$a} b:{$b}\n"; function doSwap($a, $b) { /* 请实现交换两个变量 预期结果: a:1 b:2 a:2 b:1 */ global $a, $b; $c = $a; $a = $b; $b = $c; } 看一下JAVA的实现方式,你没看错,就这个操作需要这么长的代码: import java.lang.reflect.Field; public class Main { public static void main(String[] args) { Integer a, b; a = 1; b = 2; System.out.printf("a = %d, b = %d\n", a, b); try { doSwap(a, b); } catch (Exception e) { System.out.println(e.toString()); } System.out.printf("a = %d, b = %d\n", a, b); } private static void doSwap(Integer a, Integer b) throws java.lang.Exception { // 请在这里实现交换过程 int c = a; Integer cInteger = new Integer(c); Class<? extends Integer> aClass = a.getClass(); Field avalue = aClass.getDeclaredField("value"); avalue.setAccessible(true); avalue.set(a, b); Class<? extends Integer> bClass = b.getClass(); Field bvalue = bClass.getDeclaredField("value"); bvalue.setAccessible(true); bvalue.set(b, cInteger); } } Link to comment Share on other sites More sharing options...
Recommended Posts
Please sign in to comment
You will be able to leave a comment after signing in
Sign In Now