2014-04-03 112 views
0

我已经定义了一个简单的数组,我想用下面的代码片段使用Unsafe.arrayBaseOffsetUnsafe.arrayIndexScale正确使用arrayBaseOffset和arrayIndexScale

import sun.misc.Unsafe; 
public class Arr 
{ 
    public static void main(String[] args) 
    { 
    int [] a = new int[3]; 
    a[0] = 10; a[1] = 20; a[2] = 30; 
    int baseOffset = Unsafe.arrayBaseOffset(a.getClass()); 
    int indexScale = Unsafe.arrayIndexScale(a.getClass()); 
    } 
} 

但是我得到这些错误

Arr.java:11: non-static method arrayBaseOffset(java.lang.Class) cannot be referenced from a static context 
    int baseOffset = Unsafe.arrayBaseOffset(a.getClass()); 
         ^

Arr.java:12: non-static method arrayIndexScale(java.lang.Class) cannot be referenced from a static context 
    int indexScale = Unsafe.arrayIndexScale(a.getClass()); 
         ^
+0

您是否尝试引用完全限定的对象名称。即'sun.misc.Unsafe'? – christopher

回答

2

arrayBaseOffsetarrayIndexScale方法不是静态的,所以你不能打电话给他们,你是这样的。您需要这样做:

Unsafe u = Unsafe.getUnsafe(); 
    int baseOffset = u.arrayBaseOffset(a.getClass()); 
    int indexScale = u.arrayIndexScale(a.getClass());