Primitive Types
The following table describes Java primitive types and their machine-dependent native equivalents.
| Java Type | Native Type | Description |
|---|---|---|
| boolean | jboolean | unsigned 8 bits |
| byte | jbyte | signed 8 bits |
| char | jchar | unsigned 16 bits |
| short | jshort | signed 16 bits |
| int | jint | signed 32 bits |
| long | jlong | signed 64 bits |
| float | jfloat | 32 bits |
| double | jdouble | 64 bits |
| void | void | not applicable |
The following definition is provided for convenience.
#define JNI_FALSE 0 #define JNI_TRUE 1
The
jsize integer type is used to describe cardinal indices and sizes:
typedef jint jsize;
Reference Types
The JNI includes a number of reference types that correspond to different kinds of Java objects. JNI reference types are organized in the following hierarchy:
- jobject
jclass(java.lang.Classobjects)jstring(java.lang.Stringobjects)jarray(arrays)jobjectArray(object arrays)jbooleanArray(booleanarrays)jbyteArray(bytearrays)jcharArray(chararrays)jshortArray(shortarrays)jintArray(intarrays)jlongArray(longarrays)jfloatArray(floatarrays)jdoubleArray(doublearrays)
jthrowable(java.lang.Throwableobjects)
In C, all other JNI reference types are defined to be the same as jobject. For example:
typedef jobject jclass;
In C++, JNI introduces a set of dummy classes to enforce the subtyping relationship. For example:
class _jobject {};
class _jclass : public _jobject {};
// ...
typedef _jobject *jobject;
typedef _jclass *jclass;
Field and Method IDs
Method and field IDs are regular C pointer types:
struct _jfieldID; /* opaque structure */ typedef struct _jfieldID *jfieldID; /* field IDs */ struct _jmethodID; /* opaque structure */ typedef struct _jmethodID *jmethodID; /* method IDs */
The Value Type
The
jvalue union type is used as the element type in argument arrays. It is declared as follows:
typedef union jvalue {
jboolean z;
jbyte b;
jchar c;
jshort s;
jint i;
jlong j;
jfloat f;
jdouble d;
jobject l;
} jvalue;
Type Signatures
The JNI uses the Java VM’s representation of type signatures. The following table shows these type signatures.
| Type Signature | Java Type |
|---|---|
| Z | boolean |
| B | byte |
| C | char |
| S | short |
| I | int |
| J | long |
| F | float |
| D | double |
| L fully-qualified-class ; | fully-qualified-class |
| [ type | type[] |
| ( arg-types ) ret-type | method type |
For example, the Java method:
long f (int n, String s, int[] arr);
has the following type signature:
(ILjava/lang/String;[I)J