【技能库】--Unsafe 调戏String (intern) (201)
来源:互联网 发布:火狐浏览器mac版 编辑:程序博客网 时间:2024/05/29 14:45
1 通过反射获取unsafe实例
2 获取char[]数组变量偏移地址
3 获取实例char[]
4 unsafe --> (arrayBaseOffset)第一个元素位置 和 每个元素大小(arrayIndexScale) 修改数组
5 代码如下
public static Unsafe getUnsafeInstance() throws Exception{ Field unsafeStaticField = Unsafe.class.getDeclaredField("theUnsafe"); unsafeStaticField.setAccessible(true); return (Unsafe) unsafeStaticField.get(Unsafe.class); } public static void main(String[] args) throws Exception { String s = "abc";// s.intern();//JDK 8 自动 String s1 = "abc"; Unsafe u = getUnsafeInstance();//获取变量value Field valueInString = String.class.getDeclaredField("value");//获取value的变量偏移值 long offset = u.objectFieldOffset(valueInString);//获取value char[] values = (char[]) u.getObject(s1, offset);//value本身是一个char[],要修改它元素的值,仍要获取baseOffset和indexScale long base = u.arrayBaseOffset(char[].class); long scale = u.arrayIndexScale(char[].class);//为value赋值 u.putChar(values, base + scale, 'c'); System.out.println("s:"+s+" s1:"+s1); String s2 = "abc"; System.out.println("s="+s+" s1="+s1+" s2="+s2);}
0 0
- 【技能库】--Unsafe 调戏String (intern) (201)
- String intern()
- String intern()
- String.intern();
- string.intern()
- String.intern()
- String intern
- String Intern()
- string intern
- String.intern()
- String.intern();
- String.intern()
- String#intern
- String.intern()
- String intern
- String.intern(),String.subString()
- 【Java】【String】String.intern()
- String中intern的方法 String.intern();
- linux FAQ
- BZOJ2039 人员雇佣-最小割
- MySQL数据库(26)
- Activiti核心API
- mysql 常用命令,基本知识
- 【技能库】--Unsafe 调戏String (intern) (201)
- 单片机——STM32库开发
- 动态规划详解
- 点滴学习Linux----Linux常用命令
- linux常用命令
- 运算符
- Axure初学使用心得
- HDU 2084 数塔(dp)
- 《算法导论》课后题--4--第三章