如何修改从java传递到jni的int参数

如何修改从java传递到jni的int参数,java,int,java-native-interface,Java,Int,Java Native Interface,我将一个名为length的int变量传递给JNI,以修改其值 但我不会返回修改后的值 我的JNIfunction: int change(int length){ length =6; return something } 当我在函数调用后使用length值时,它本身具有默认值,而不是修改后的值 为什么我得不到修改后的值?有两种方法: 1)第一个是最简单的,只需返回长度: int change(int length){ length = 6; return

我将一个名为length的int变量传递给JNI,以修改其值

但我不会返回修改后的值

我的JNIfunction:

int change(int length){
 length =6;
 return something
}
当我在函数调用后使用length值时,它本身具有默认值,而不是修改后的值


为什么我得不到修改后的值?

有两种方法:

1)第一个是最简单的,只需返回长度:

int change(int length){
        length = 6;
        return length;
    }
N.B.Java永远是

2)第二个问题有点棘手:

您必须创建一个方法,以便设置获取
长度

大概是这样的:

public class FooBar { //This is you class with the length var
    private int _length;

    public FooBar(){
        _length = 0;
    }

    //Now we are going to create the SET and GET methods

    public GetLength(){
        return _length;
    }
    public SetLength(int length){
        _length = length;
    }
}
现在,您的类与上面的类相似,我们可以这样做:

int change(int length){
        SetLength(length);
        return something;
    }
如果您是从另一个类调用它,您应该记住首先创建该类的对象,如下例所示:

FooBar foo1 = new FooBar();

//things and things here

int change(int length){
        foo1.SetLength(length);
        return something;
    }
如您所见,
lenght
变量现在是private,因此我们需要始终使用:

  • GetLength
    以检索其值

  • SetLength
    以设置新值


java中的每个类都应该是这样工作的,只是java编程的好习惯

这甚至不能仅在Java中工作(即,如果
change(…)
是Java方法)。您需要返回已更改的变量(即
返回长度;
)Java是按值传递的。@JackFlamp的可能副本如果链接的答案清楚地回答了以下问题,您可以简单地将其标记为副本:)对于Arrays,我们可以获取ByteArrayElements和setbytearrayregion,对吗?…是否有类似的内容?