The Java TM Tutorial

| Start of Tutorial > Start of Trail > Start of Lesson | Search

Trail: Java Native Interface
Lesson: Integrating Java and Native Programs

## Mapping between Java and Native Types

> In this section, you will learn how to reference Java types in your native method. You need to do this when you want to:
> - Access arguments passed in to a native method from a Java application.
> - Create Java objects in your native method.
> - Have your native method return results to the caller.

### Java Primitive Types

Your native method can directly access Java primitive types such as booleans, integers, floats, and so on, that are passed from programs written in Java. For example, the Java type `boolean` maps to the native language type `jboolean` (represented as unsigned 8 bits), while the Java type `float` maps to the native language type `jfloat` (represented by 32 bits). The following table describes the mapping of Java primitive types to native types.

> ##### Primitive Types and Native Equivalents

> Java Type | Native Type | Size in bits
> | `boolean` | `jboolean` | 8, unsigned | `byte` | `jbyte` | 8 | `char` | `jchar` | 16, unsigned | `short` | `jshort` | 16 | `int` | `jint` | 32 | `long` | `jlong` | 64 | `float` | `jfloat` | 32 | `double` | `jdouble` | 64 | `void` | `void` | n/a

### Java Object Types

Java objects are passed by reference. All references to Java objects have the type `jobject`. For convenience and to avoid programming errors, the JNI implements a set of types that are conceptually all subclassed from (or are "subtypes" of) `jobject`, as follows:

This figure has been reduced to fit on the page.
Click the image to view it at its natural size.

In our `Prompt.java` example, the native method `getLine` takes a Java string as an argument and returns a Java string:

>     private native String getLine(String prompt);

Its corresponding native implementation has type `jstring` for both the argument and the return value:

>     JNIEXPORT jstring JNICALL
>         Java_Prompt_getLine(JNIEnv *, jobject, jstring);

Graphically, this looks as follows:

This figure has been reduced to fit on the page.
Click the image to view it at its natural size.
As mentioned above, `jstring` corresponds to the Java type `String`. Notice that the second argument to `Java_Prompt_getLine`, which is the reference to the object itself, has type `jobject`.

| Start of Tutorial > Start of Trail > Start of Lesson | Search