A literal is a fixed value written directly inside a Java program. Unlike a variable, whose value can change during execution, a literal represents the actual value that the programmer wants to use at that point in the code.
For example, in int age = 25;, the number 25 is a literal. In String name = "Rahul";, "Rahul" is a string literal.
Why Literals Exist
Programs constantly work with values—numbers, characters, text, boolean states, and more. Java needs a clear way to represent those values directly in source code, and literals provide that mechanism.
int age = 25; double price = 499.99; char grade = 'A'; boolean active = true; String name = "Anita";
The values 25, 499.99, 'A', true, and "Anita" are all literals.
Remember: A literal is a value written directly in the source code. A variable is a named storage location that can hold a value.
Types of Literals in Java
Java provides several forms of literals. The most important categories are integer, floating-point, character, string, boolean, and null literals.
| Literal Type | Example | Common Java Type |
|---|---|---|
| Integer | 100 | int |
| Floating-point | 25.75 | double |
| Character | 'A' | char |
| String | "Java" | String |
| Boolean | true | boolean |
| Null | null | Reference types |
Integer Literals
Integer literals represent whole numbers without a decimal point. By default, an integer literal is treated as an int when its value is within the range of the type.
int age = 25; int score = 100; int temperature = -10;
Java also allows integer literals to be written using different number systems.
int decimal = 25; int binary = 0b11001; int octal = 031; int hexadecimal = 0x19;
These four variables represent the same numeric value: 25. The prefixes tell Java which number system is being used.
| Number System | Prefix | Example | Value |
|---|---|---|---|
| Decimal | None | 25 | 25 |
| Binary | 0b | 0b11001 | 25 |
| Octal | 0 | 031 | 25 |
| Hexadecimal | 0x | 0x19 | 25 |
Long Literals
A whole-number literal is normally treated as an int. If a value needs to be represented as a long, the literal can use the suffix L or l.
long population = 8000000000L;
Using uppercase L is generally preferred because lowercase l can visually resemble the number 1.
Common mistake: Writing a large integer without the L suffix can cause a compilation error if the literal is too large to fit into an int.
Underscores in Numeric Literals
Java allows underscores inside numeric literals to improve readability. The underscores do not change the numeric value.
int population = 1_000_000; long distance = 9_876_543_210L; double price = 1_299.99;
This can make large values easier to read, especially when dealing with financial amounts, measurements, or large identifiers represented numerically.
Floating-Point Literals
Floating-point literals contain a decimal point or use scientific notation. By default, a decimal literal is treated as a double.
double price = 99.99; double temperature = 36.5; double distance = 1.5e3;
A float literal requires the suffix F or f.
float rate = 5.5F;
Without the suffix, 5.5 is considered a double literal.
Character Literals
A character literal represents a single character and is enclosed in single quotation marks.
char grade = 'A'; char symbol = '@'; char digit = '7';
A character literal contains one character. Therefore, 'A' is a character, while "A" is a string.
char letter = 'A'; String text = "A";
Although they look similar, they represent different Java types.
Escape Sequences
Java provides escape sequences for characters that are difficult or impossible to write directly inside a literal.
| Escape Sequence | Meaning | Example |
|---|---|---|
| \n | New line | "Hello\nJava" |
| \t | Tab | "Name\tAge" |
| \\ | Backslash | "C:\\Java" |
| \" | Double quotation mark | "He said \"Hello\"" |
| \' | Single quotation mark | '\'' |
String Literals
A string literal represents a sequence of characters enclosed in double quotation marks.
String name = "Ravi"; String message = "Welcome to Java"; String empty = "";
String literals can contain spaces, numbers, symbols, and escape sequences.
String message = "Java\tProgramming\nCourse";
The compiler recognizes the complete text between the double quotation marks as a string literal.
Boolean Literals
Java has exactly two boolean literals: true and false.
boolean loggedIn = true; boolean paymentCompleted = false;
They are lowercase and are not written inside quotation marks. Writing "true" creates a string rather than a boolean value.
Null Literal
The null literal represents the absence of an object reference. It can be assigned to reference-type variables but not to primitive variables.
String name = null;
Here, name does not refer to a String object. The reference currently contains no object reference.
int age = null; // Invalid
Primitive types such as int, double, and boolean cannot hold null.
Literal Type and Variable Type
It is important to distinguish the type of a literal from the type of the variable receiving it.
double value = 10;
The literal 10 is an integer literal, normally of type int. Java can widen that value to double for the assignment.
By contrast:
float value = 10.5;
This does not compile because 10.5 is a double literal by default. A float suffix is required.
float value = 10.5F;
Literal Examples in a Real Program
public class Product { public static void main(String[] args) { String productName = "Laptop"; int quantity = 2; double price = 54999.99; char category = 'E'; boolean available = true; System.out.println(productName); System.out.println(quantity); System.out.println(price); System.out.println(category); System.out.println(available); } }
This example contains several literal types working together. The string identifies the product, the integer represents quantity, the floating-point value represents price, the character represents a category code, and the boolean represents availability.
Common Beginner Mistakes
- Confusing character literals such as 'A' with string literals such as "A".
- Forgetting the F suffix when assigning a decimal literal to a float.
- Forgetting the L suffix for large long literals when required.
- Writing "true" when a boolean literal true is required.
- Trying to assign null to a primitive variable.
- Using an integer literal outside the range of the expected type.
Best Practices
- Use numeric suffixes such as L and F when the intended type requires them.
- Use underscores in large numeric literals when they improve readability.
- Use character literals for single characters and string literals for text.
- Prefer clear literal values and avoid unexplained numeric constants in complex business logic.
- Use constants with meaningful names when the same fixed value appears repeatedly.
Interview Insights
| Question | Key Point |
|---|---|
| What is a literal? | A fixed value written directly in Java source code. |
| What is the default type of an integer literal? | int, unless the literal requires a different type or uses an appropriate suffix. |
| What is the default type of a decimal literal? | double. |
| How is a float literal written? | Use an F or f suffix, such as 10.5F. |
| What is the difference between 'A' and "A"? | 'A' is a char literal, while "A" is a String literal. |
| What are boolean literals? | true and false. |
| What does null represent? | The absence of an object reference for a reference-type variable. |
Quick Revision
| Literal | Example | Key Rule |
|---|---|---|
| Integer | 100 | Normally int |
| Long | 100L | Use L suffix when needed |
| Floating-point | 10.5 | Normally double |
| Float | 10.5F | Use F suffix |
| Character | 'A' | Use single quotes |
| String | "Java" | Use double quotes |
| Boolean | true | Only true or false |
| Null | null | Used with reference types |
Literals may look like simple values, but they are an important part of Java's type system and syntax. Understanding how Java interprets numbers, characters, strings, boolean values, and null helps prevent subtle compilation errors and makes later topics such as variables, type conversion, expressions, and constants much easier to understand. Once you can recognize a literal at a glance, you are already reading Java code with much greater precision.
