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);
}
}
Java实现交换两个String的更多相关文章
- Java反射交换两个整型变量的值
在一次面试中,做了这么一道题"交换两个整型变量的值",当时看到这个题目之后,会心一笑,这也太简单了--直接使用中间变量交换不就可以了吗?但是,面试官却说不需要返回值,在调用的地方, ...
- 如何交换两个等长整形数组使其数组和的差最小(C和java实现)
1. 问题描述: 有两个数组a,b,大小都为n,数组元素的值任意整形数,无序: 要求:通过交换a,b中的元素,使[数组a元素的和]与[数组b元素的和]之间的差最小. 2. 求解思路: 当前数组a和数组 ...
- 在 Java 中不使用多余变量交换两个字符串
在 Java 中不使用多余变量交换两个字符串 public class Test { public static void main(String[] args) { String a = " ...
- java交换两个参数值的四种方法
第一种:添加中间变量,算是最经典最简易的一种了. //添加一个中间变量 int x = 1, y = 2; int z; z = x;x = y;y = z; System.out.println(x ...
- Java 交换两数的方法
错误示范 1. 直接交换 public class SwapNumbers { // 直接交换 public static void swap(int a, int b) { int temp = a ...
- Java语言基础---两变量间的交换
使用中间变量交换两个变量的值 int a = 10 , b = 11 , m; m = a; a = b; b = m; 不使用中间变量交换两个变量的值 int a = 10; int b = 11; ...
- 理解 java 使用 异或 交换两数
网上看了一些使用异或交换两数,不是很好理解.现在写一下自己的理解. 首先是 异或原则,对于任意 x: x ^ x == 0; x ^ 0 == x; 思路: 根据原则,可以得到两个公式: 求a: ...
- 交换两个局部变量Integer的值
反射是很强大的,谁说的final修饰的就不能改变, 通过反射获取成员变量,之后可以取消访问修饰符,也就是说private的也可以访问, 在修改常量(final修饰的),之后就可以对其做任何操作了 如下 ...
- Python中的print、input函数以及Python中交换两个变量解析
一.Python中的值交换操作 首先明确一点点,Python中的一切都是面向对象的,可以理解为Python的中一切都是对象. 我们知道Java也是面向对象的语言,但是在Java中定义一个值变量如下: ...
随机推荐
- FAST:通过Floodlight控制器下发流表
参考: Floodlight+Mininet搭建OpenFlow(四):流表操作 通过Floodlight控制器下发流表 下发流表的方式有两种: 1.借助Floodlight的北向API,利用curl ...
- go 语言字典元素删除
package main import "fmt" func main() { /* 创建map */ countryCapitalMap := map[string]string ...
- Oracle 12c Windows安装、介绍及简单使用(图文)
1.下载 地址为:http://www.oracle.com/technetwork/cn/database/enterprise-edition/downloads/index.html 含企业版和 ...
- chrome表单自动填充去掉input黄色背景
input文本框是纯色背景的 1. input:-webkit-autofill { -webkit-box-shadow: 0 0 0px 1000px white inset!important; ...
- 音视频学习系列第(七)篇---MediaCodec的使用
音视频系列 什么是MediaCodec MediaCodec是安卓官方提供的一套用于音视频编码和解码的API,该API是在安卓4.1(API 16)引入的,因此只能用于4.1以上的手机 MediaCo ...
- python - HTMLTestRunner 测试报告模板设置
python - HTMLTestRunner 测试报告模板设置 优化模板下载地址: http://download.csdn.net/download/chinayyj2010/10039097 ...
- iconfont使用方法
最近才发现一种新的iconfont的使用方法 http://www.iconfont.cn/ 经常使用的图标放在一个项目里 需要关注的几点: 使用方法有三种方式unicode , font clas ...
- ScriptableObjec 的简单使用
1.ScriptableObject的创建(一): using System.Collections; using System.Collections.Generic; using UnityEng ...
- spring boot:创建一个简单的web(maven web project)
1.新建一个maven web project; 2.在pom.xml文件中添加相应的依赖包: 3.新建一个HelloController请求控制类: 4.编写index.jsp页面: 5.编写启动类 ...
- YII第三步,日志开启
YII第三步,日志开启 index.php入口文件配置: defined('YII_DEBUG') or define('YII_DEBUG',true); cofig/main.php 'prelo ...