Data Types in Java : Primitive and Non-Primitive Data Types

Every value in Java has a data type, and Java data types fall into two broad categories: primitive data types and non-primitive (reference) data types. Understanding the difference is fundamental to writing correct Java programs.

Primitive Data Types

Primitive data types are predefined by the language, store actual values directly in memory, and are not objects. Java has 8 primitive types: byte, short, int, long, float, double, char, and boolean.

int age = 30;
boolean isActive = true;
char letter = 'J';

Non-Primitive (Reference) Data Types

Non-primitive types don't store the actual value directly — instead, they store a reference (memory address) that points to where the object's data lives on the heap. These include classes, interfaces, arrays, and strings.

String name = "Uncodemy";
int[] numbers = {1, 2, 3};

Key Differences

  • Primitive types are predefined by the language; non-primitive types are created by the programmer (except built-in classes like String)
  • Primitive types store values directly; non-primitive types store references to objects
  • Primitive types have a fixed size; non-primitive types' size depends on the object they represent
  • Primitive types cannot be null; non-primitive types can be assigned null
  • Non-primitive types come with methods (like String.length()); primitive types do not

Common Examples of Non-Primitive Types

  • String — a sequence of characters
  • Arrays — a fixed-size collection of elements of the same type
  • Classes — user-defined blueprints for objects
  • Interfaces — contracts that classes can implement
Knowing whether a type is primitive or reference-based matters for memory usage, performance, and understanding how values behave when passed to methods.

Master Java with Uncodemy

Hands-on training, live projects, and placement support in our Java Programming Course.

Explore the Course