在Java中我们所使用的实例变量其实都是一个引用,所以如果要求实现一个swap(String A, String B)这种函数时无法实现的,因为在类方法的定义中是先对行参进行地址传递,然后对形参修改,所以对原来的变量不产生影响。
一种实现方法是不使用方法传递参数,直接交换,另一种有趣的方式是使用Java的反射来实现
import java.lang.reflect.*; public class SwapStr { public static void swap(String str1, String str2) { try{ Object temp; Field fv = String.class.getDeclaredField("value"); Field fh = String.class.getDeclaredField("hash"); fv.setAccessible(true); fh.setAccessible(true); temp = fv.get(str1); fv.set(str1, fv.get(str2)); fv.set(str2, temp); fh.setInt(str1, 0); fh.setInt(str2, 0); }catch(Exception e){ e.printStackTrace(); } } public static void main(String[] args) { String str1 = "hello"; String str2 = "world"; swap(str1, str2); System.out.println(str1 + " " + str2); } }
时间: 2024-10-06 14:07:39