How do I convert a String to an int in Java?
Categories:
Converting Strings to Integers in Java: A Comprehensive Guide

Learn the various methods to safely and efficiently convert String values to int primitives and Integer objects in Java, understanding potential pitfalls and best practices.
In Java programming, it's a common requirement to convert data from one type to another. One of the most frequent conversions involves transforming a String
representation of a number into an int
primitive or an Integer
object. This process is crucial when dealing with user input, parsing data from files, or handling network communication, where numerical data is often received as text. This article will explore the primary methods for performing this conversion, discuss their differences, and highlight important considerations like error handling.
Using Integer.parseInt()
for Primitive int
The most straightforward and commonly used method to convert a String
to a primitive int
in Java is Integer.parseInt()
. This static method of the Integer
wrapper class takes a String
as an argument and returns its integer equivalent. It's essential to ensure that the String
contains a valid numerical representation, as an invalid format will result in a NumberFormatException
.
public class StringToIntExample {
public static void main(String[] args) {
String strNumber = "123";
try {
int number = Integer.parseInt(strNumber);
System.out.println("Converted int: " + number); // Output: Converted int: 123
String invalidStr = "abc";
int invalidNumber = Integer.parseInt(invalidStr); // This line will throw NumberFormatException
System.out.println("This won't be reached: " + invalidNumber);
} catch (NumberFormatException e) {
System.err.println("Error: Invalid number format. " + e.getMessage());
}
String largeNumberStr = "2147483647"; // Max int value
int largeNumber = Integer.parseInt(largeNumberStr);
System.out.println("Large int: " + largeNumber);
String outOfRangeStr = "2147483648"; // Exceeds max int value
try {
int outOfRangeNumber = Integer.parseInt(outOfRangeStr);
System.out.println("This won't be reached: " + outOfRangeNumber);
} catch (NumberFormatException e) {
System.err.println("Error: Number out of int range. " + e.getMessage());
}
}
}
Example demonstrating Integer.parseInt()
with valid and invalid inputs.
Integer.parseInt()
calls in a try-catch
block to gracefully handle NumberFormatException
. This prevents your application from crashing due to malformed input.Using Integer.valueOf()
for Integer
Objects
If you need to convert a String
into an Integer
object (the wrapper class for int
), you can use Integer.valueOf()
. This method also takes a String
as input and returns an Integer
object. Internally, Integer.valueOf()
often uses Integer.parseInt()
and then boxes the result into an Integer
object. It also caches frequently used Integer
values (typically -128 to 127) for performance.
public class StringToIntegerObjectExample {
public static void main(String[] args) {
String strValue = "456";
try {
Integer integerObject = Integer.valueOf(strValue);
System.out.println("Converted Integer object: " + integerObject);
// Autounboxing allows direct use as primitive int
int primitiveInt = integerObject;
System.out.println("Autounboxed primitive int: " + primitiveInt);
String invalidStr = "xyz";
Integer invalidInteger = Integer.valueOf(invalidStr); // Throws NumberFormatException
System.out.println("This won't be reached: " + invalidInteger);
} catch (NumberFormatException e) {
System.err.println("Error: Invalid format for Integer object. " + e.getMessage());
}
}
}
Example of converting a String to an Integer object using Integer.valueOf()
.
Integer.parseInt()
returns a primitive int
, Integer.valueOf()
returns an Integer
object. Java's autoboxing/unboxing feature often blurs this distinction, allowing you to use them interchangeably in many contexts. However, understanding the difference is important for performance and null-safety.Handling Different Radix (Base)
Both Integer.parseInt()
and Integer.valueOf()
offer overloaded versions that accept a second argument: radix
. This allows you to specify the base of the number system the String
represents (e.g., binary (base 2), octal (base 8), hexadecimal (base 16)). The default radix is 10 (decimal).
public class RadixConversionExample {
public static void main(String[] args) {
String binaryStr = "1010"; // Binary for 10
int decimalFromBinary = Integer.parseInt(binaryStr, 2);
System.out.println("Binary '1010' to decimal: " + decimalFromBinary); // Output: 10
String octalStr = "12"; // Octal for 10
int decimalFromOctal = Integer.parseInt(octalStr, 8);
System.out.println("Octal '12' to decimal: " + decimalFromOctal); // Output: 10
String hexStr = "A"; // Hexadecimal for 10
int decimalFromHex = Integer.parseInt(hexStr, 16);
System.out.println("Hex 'A' to decimal: " + decimalFromHex); // Output: 10
// Using valueOf with radix
Integer hexObject = Integer.valueOf("FF", 16);
System.out.println("Hex 'FF' to Integer object: " + hexObject); // Output: 255
}
}
Converting strings representing numbers in different bases (radix) to decimal integers.
flowchart TD A[Start: String Input] --> B{Is String valid integer format?} B -- Yes --> C{Call Integer.parseInt() or Integer.valueOf()} C --> D{Specify Radix?} D -- Yes --> E[Use parseInt(String, int radix)] D -- No --> F[Use parseInt(String)] E --> G[Result: int primitive or Integer object] F --> G B -- No --> H[Throw NumberFormatException] H --> I[End: Error Handled] G --> J[End: Successful Conversion]
Flowchart illustrating the String to int/Integer conversion process in Java.
String
values that might contain leading/trailing whitespace. Integer.parseInt()
and Integer.valueOf()
do not automatically trim whitespace. You should call str.trim()
on the String
first to avoid NumberFormatException
for inputs like " 123 "
.public class TrimExample {
public static void main(String[] args) {
String spacedNumber = " 42 ";
try {
int number = Integer.parseInt(spacedNumber.trim());
System.out.println("Converted (trimmed): " + number);
String noTrim = " 42 ";
// int errorNumber = Integer.parseInt(noTrim); // This would throw NumberFormatException
// System.out.println(errorNumber);
} catch (NumberFormatException e) {
System.err.println("Error due to whitespace: " + e.getMessage());
}
}
}
Demonstrating the importance of trimming whitespace before conversion.