水木上讨论如何修改一个immutable类(Long)的帖子,zms大牛给出了一种直接访问内存的方案
关键类:sun.misc.Unsafe
1
2
3
4
5
6
7
8
9
10
11
12
| Class klass=Class.forName("java.nio.DirectByteBuffer");
Field field = klass.getDeclaredField("unsafe");
field.setAccessible(true);
Object o = field.get(null);
Unsafe unsafe= (Unsafe) o;
field=Long.class.getDeclaredField("value");
long offset=unsafe.objectFieldOffset(field); //这是偏移量
//unsafe 和 offset可以一直用
final Long n=100L;
unsafe.putLong(n,offset,200);
System.out.println(n);
|
拜一下