Java中string的交换

Java实现引用交换

前提

  • Java自身机制,导致函数参数的传递其实无论是基本类型还是引用类型,实质都是值传递,无法直接通过函数临时交换达到引用交换的目的
  • 虽然无法直接实参数指向交换,但是可以通过其他方法实现

实现

  • 第一种方法是直接交换,即不通过函数传参数交换,直接用类似
string temp = null;
string temp = s1;
s1 = s2;
s2 = temp;
  • 通过反射实现
public static void exchange(String s1,String s2){
        try {
            Object temp;
            Field fv = String.class.getDeclaredField ( "value" );
            Field fh = String.class.getDeclaredField ( "hash" );

            fv.setAccessible ( true  );
            fh.setAccessible ( true  );
			//交换
            temp =  fv.get (s1);
            fv.set(s1, fv.get(s2));
            fv.set(s2, temp);
            
            fh.setInt(s1, 0);
            fh.setInt(s2, 0);

        } catch (Exception e) {
            e.printStackTrace ();
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值