1. 示例代码
public class User {
private boolean sex;
public boolean isSex() {
return sex;
}
public void setSex(boolean sex) {
this.sex = sex;
}
}
import sun.misc.Unsafe;
import java.lang.reflect.Field;
public class Main {
public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {
Field f = Unsafe.class.getDeclaredField("theUnsafe");
f.setAccessible(true);
Unsafe unsafe = (Unsafe) f.get(null);
User user = new User();
Field flagField = User.class.getDeclaredField("sex");
unsafe.putByte(user, unsafe.objectFieldOffset(flagField), (byte) 2);
System.out.println(user.isSex()); // false
unsafe.putByte(user, unsafe.objectFieldOffset(flagField), (byte) 3);
System.out.println(user.isSex()); // true
}
}
2. 结论
通过直接对boolean值的内存地址直接赋值,
当赋值 2 -> 二级制10,取0,得到false;
当赋值 3 -> 二级制11,取1,得到true.