2014-04-03 82 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());