Java实现交换两个String

在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

Java实现交换两个String的相关文章

如何在JAVA中比较两个String对象

问题 最近写程序的时候,遇到了需要比较两个 String 对象是否相等的情况,我习惯性的写了形如if(a == "a"){}的语句,IDEA 跳出警告,内容如下: String values are compared using '==', not 'equals()'. 也就是说我刚刚那句话应该写成if(a.equals("a")){}才对,果然不再标红了. 说明 那么,为什么会这样呢?==和equals()分别是什么效果呢? 对于基本数据类型byte(字节型).

java实现交换两个数

package com.echo; public class SwapTwoNumbers { public static void main(String[] args) { int a = 10; int b = 20; // 1)用第三方变量(开发用) // int temp = a; // a = b; // b = temp; // System.out.println("1)用第三方变量实现:" + "a = " + a + ",b = &qu

java实现原数组根据下标分隔成两个子数组并且在原数组中交换两个子数组的位置

此类实现:输出一行数组数据,根据输入的下标,以下标位置为结束,将原数组分割成两组子数组.并交换两个子数组的位置,保持子数组中的元素序号不变.如:原数组为7,9,8,5,3,2 以下标3为分割点,分割为子数组一:7,9,8,5.和子数组二:3,2.经过交换算法后的结果应为:3,2,7,9,8,5 有两种交换算法<1>前插法:将子数组3,2另存在一个临时数组中,将原数组7,9,8,5,3,2每一位向后移两个位置  再将子数组3,2插入到移动好元素位置的原数组中.<2>逆置法:将原数组7

在 Java 中不使用多余变量交换两个字符串

在 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

java(引入一个中间变量,不引入中间变量)交换两个变量的值

一.描述 在不引入其它变量的情况下交换两个数,引入一个变量做中介,交换两个数的值. 二.源代码 <span style="font-size:18px;">package tong.yue.sort; public class SwapTwoValues { /** * @param args */ public static void main(String[] args) { int a = 10,b = 20; swapByExtraVariable(a,b); sw

JAVA不用临时变量交换两个变量的值

交换两个变量的值,不适用临时变量 1 public class Test{ 2 public static void main(String[] args){ 3 int a = 1; 4 int b = 2; 5 // 请交换两个变量的值 6 } 7 } 交换两变量的值 加减实现交换 1 public class Test{ 2 public static void main(String[] args){ 3 int a = 1; 4 int b = 2; 5 // 请交换两个变量的值 6

java基础复习之对于String对象,可以使用“=”赋值,也可以使用new关键字赋值,两种方式有什么区别?

String类型是实际工作中经常用到的类型,从数据类型上划分,String是一个引用类型,是API中定义的一个类.所以String类型的对象可以用new创建,例如String name=new String("string");为变量name进行赋值,值为"string" ,然而String类比其他类有些特殊,可以使用'='直接赋值,如 String name="string";也是为变量name进行赋值,值为"string"

java交换两个数的常见方法及效率测试

原文地址--http://blog.csdn.net/qq525099302/article/details/47294443 论两个数的交换的重要性 讨论交换两个数的方法对某些人来说无聊,但某些人很乐意探究,甚至某些面试官喜欢用这个做文章.刚出来找工作笔试的时候我也碰到与之相关的问题. 常见的两个数交换的方法 边赋值边运算 加减减交换 用中间变量交换 异或交换 下面是代码 public class Test { public static void main(String[] args) {

Java比较两个String字符串数组

比较两个String字符串数组元素差异 1.工具类 package io.renren.common.utils; import org.apache.commons.lang3.ArrayUtils; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @program: ivvdata-security * @description: