在jintArray中设置给定单元格的值

时间:2011-05-25 08:37:27

标签: java arrays java-native-interface set int

我从JVM获取arr int []并希望在指定的索引处设置一个值, 像这样:

jintArray arr;
jint* ints = _env->GetIntArrayElements(arr, false);
int newvalue = 4;

_env->SetIntArrayRegion(ints, 3, 1, &newvalue); // this works
inst[3] = newvalue; // this failed !!!

你能告诉我为什么第二次任务失败??? 它应该工作并且更快(没有方法调用)。

谢谢, LUC

2 个答案:

答案 0 :(得分:0)

卢克提到,他正在谈论JNI。一般的答案是JVM的GC可能会在后备存储中移动到阵列。 jintArray类型只是一个typedef,它实际上只表示数组的句柄。

如果您正在操作数组,则必须使用SetIntArrayRegion,它将传递的指针复制到后备存储中,

或者你可以使用GetIntArrayElements的组合,它会固定或复制数组,然后是ReleaseIntArrayElements

由于jintArray不是正确的C数组,因此不能使用索引器运算符[]。

答案 1 :(得分:-1)

JIntArray本身不是原始数组,它只包含一个原始数组。要设置值,可以使用set(int index,int value)方法(有关详细信息,请参阅API),或者可以使用JIntArray toArray()方法获取数组,并使用该数组。 / p>

在您的上下文中,第一种方法如下所示:

arr.set(3, newvalue);