您的位置:首页 > 编程语言 > Java开发

怪异的JAVA对象属性存储

2016-05-06 10:53 387 查看
public class TestBean {

public int intPro;

public String strPro;

public int intExtend;

public String strExtend;

}

/**

* @param args

* @throws Exception

*/

public static void main(String[] args) throws Exception {

// TODO Auto-generated method stub

unsafe = getUnsafeInstance();

TestBean test=new TestBean();

test.intPro=1111;

test.strPro="22222333";

test.intExtend=3333;

test.strExtend="extend";

marshal(test);

}

@SuppressWarnings({ "deprecation", "restriction" })

public static void marshal(TestBean bean) throws NoSuchFieldException, SecurityException

{

Field[] fields=bean.getClass().getDeclaredFields();

for(int i=0;i<fields.length;i++)

{

Field field =fields[i];

System.out.println(field.getName()+":"+unsafe.objectFieldOffset(field));//打印出字段在对象的偏移地址

}

}

结果输出是:

intPro:12

strPro:20

intExtend:16

strExtend:24

按理说strPro的偏移位置应该是16,而实际上变成了intExtend 偏移位置是16

原因还在研究中,有结论再补充上来
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: