How can I convert a char to int in Java?
Categories:
Converting Chars to Integers in Java: A Comprehensive Guide

Learn various methods to convert char
data types to int
in Java, understanding their nuances and best use cases for different scenarios.
In Java, char
and int
are primitive data types that, while distinct, often require conversion between them. A char
represents a single 16-bit Unicode character, while an int
represents a 32-bit signed two's complement integer. Understanding how to convert a char
to an int
is crucial for tasks ranging from basic arithmetic operations to parsing user input. This article explores several common and effective methods for performing this conversion, highlighting their underlying mechanisms and appropriate contexts.
Understanding Char and Int in Java
Before diving into conversion methods, it's important to grasp how Java handles char
and int
types. A char
in Java is not just a character; it's an unsigned 16-bit integer representing a Unicode code point. This means that every character inherently has an associated integer value. When you convert a char
to an int
, you are essentially retrieving this underlying Unicode value. Conversely, converting an int
to a char
involves interpreting the integer as a Unicode code point.
flowchart TD A[Char Variable] --> B{Implicit Conversion?} B -->|Yes| C[Direct Assignment (Unicode Value)] B -->|No| D{Specific Conversion Needed?} D -->|Numeric Char| E[Character.getNumericValue()] D -->|Digit Char| F[Character.digit()] D -->|String Conversion| G[Integer.parseInt(String.valueOf(char))] C --> H[int Result (Unicode)] E --> H F --> H G --> H
Decision flow for converting a char to an int in Java
Method 1: Direct Type Casting (Implicit Conversion)
The simplest way to convert a char
to an int
is through direct type casting. Because char
is a smaller data type than int
, Java performs an implicit widening conversion. This means you can directly assign a char
to an int
variable, and the int
will hold the Unicode (ASCII for basic characters) value of that character. This method is straightforward and efficient when you need the character's numerical representation.
public class CharToIntDirectCast {
public static void main(String[] args) {
char myChar = 'A';
int unicodeValue = myChar; // Direct assignment (implicit casting)
System.out.println("The char '" + myChar + "' has Unicode value: " + unicodeValue); // Output: 65
char digitChar = '5';
int digitUnicode = digitChar;
System.out.println("The char '" + digitChar + "' has Unicode value: " + digitUnicode); // Output: 53
char specialChar = '$';
int specialUnicode = specialChar;
System.out.println("The char '" + specialChar + "' has Unicode value: " + specialUnicode); // Output: 36
}
}
Example of direct type casting a char to an int.
Method 2: Using Character.getNumericValue()
If you have a char
that represents a digit (e.g., '0' through '9') and you want its actual numeric integer value (0 through 9), Character.getNumericValue()
is the appropriate method. This method handles various Unicode digit representations and returns the int
value represented by the character. If the character is not a numeric character, it returns -1.
public class CharToIntNumericValue {
public static void main(String[] args) {
char digitChar = '7';
int numericValue = Character.getNumericValue(digitChar);
System.out.println("The numeric value of '" + digitChar + "' is: " + numericValue); // Output: 7
char nonDigitChar = 'X';
int nonDigitValue = Character.getNumericValue(nonDigitChar);
System.out.println("The numeric value of '" + nonDigitChar + "' is: " + nonDigitValue); // Output: -1
char unicodeDigit = '\u0662'; // Arabic-Indic Digit Two
int unicodeNumericValue = Character.getNumericValue(unicodeDigit);
System.out.println("The numeric value of '" + unicodeDigit + "' is: " + unicodeNumericValue); // Output: 2
}
}
Using Character.getNumericValue()
for digit characters.
Method 3: Using Character.digit()
Similar to getNumericValue()
, Character.digit(char ch, int radix)
is used to convert a character representing a digit into an int
. The key difference is the radix
parameter, which specifies the base (e.g., 10 for decimal, 16 for hexadecimal). This method is ideal when you need to parse digits in a specific number system. It returns the integer value of the digit, or -1 if the character is not a digit in the specified radix.
public class CharToIntDigitMethod {
public static void main(String[] args) {
char decimalDigit = '9';
int decimalValue = Character.digit(decimalDigit, 10);
System.out.println("The decimal value of '" + decimalDigit + "' is: " + decimalValue); // Output: 9
char hexDigit = 'F';
int hexValue = Character.digit(hexDigit, 16);
System.out.println("The hexadecimal value of '" + hexDigit + "' is: " + hexValue); // Output: 15
char invalidDigit = 'G';
int invalidValue = Character.digit(invalidDigit, 16);
System.out.println("The hexadecimal value of '" + invalidDigit + "' is: " + invalidValue); // Output: -1
}
}
Converting characters to integers using Character.digit()
with different radices.
Method 4: Subtracting '0' for ASCII Digits
For char
values that are ASCII digits ('0' through '9'), a common and efficient trick is to subtract the char
value of '0'. Since ASCII characters are sequentially ordered, subtracting '0' from any digit character will yield its corresponding integer value. This method is very fast but only works reliably for ASCII digits.
public class CharToIntSubtractZero {
public static void main(String[] args) {
char digitChar = '4';
int intValue = digitChar - '0';
System.out.println("The integer value of '" + digitChar + "' is: " + intValue); // Output: 4
char anotherDigit = '0';
int anotherIntValue = anotherDigit - '0';
System.out.println("The integer value of '" + anotherDigit + "' is: " + anotherIntValue); // Output: 0
// Caution: This does NOT work for non-ASCII digits or non-digit characters
char nonAsciiDigit = '\u0662'; // Arabic-Indic Digit Two
int incorrectValue = nonAsciiDigit - '0';
System.out.println("Incorrect value for non-ASCII digit '" + nonAsciiDigit + "': " + incorrectValue); // Output: 162 (Unicode of \u0662 is 1634, Unicode of '0' is 48. 1634 - 48 = 1586, not 2)
}
}
Subtracting '0' to convert ASCII digit chars to ints.
Character.getNumericValue()
for broader Unicode support.Method 5: Converting to String then Parsing
Another approach, though generally less efficient for single characters, is to first convert the char
to a String
and then parse that String
into an int
using Integer.parseInt()
. This method is more verbose but can be useful in scenarios where you're already dealing with string manipulation or need to handle potential NumberFormatException
for invalid inputs.
public class CharToIntStringParse {
public static void main(String[] args) {
char digitChar = '8';
String charAsString = String.valueOf(digitChar);
try {
int intValue = Integer.parseInt(charAsString);
System.out.println("The integer value of '" + digitChar + "' is: " + intValue); // Output: 8
} catch (NumberFormatException e) {
System.out.println("Error: '" + digitChar + "' is not a valid integer character.");
}
char nonDigitChar = 'K';
String nonDigitAsString = String.valueOf(nonDigitChar);
try {
int intValue = Integer.parseInt(nonDigitAsString);
System.out.println("The integer value of '" + nonDigitChar + "' is: " + intValue);
} catch (NumberFormatException e) {
System.out.println("Error: '" + nonDigitChar + "' is not a valid integer character."); // Output: Error...
}
}
}
Converting a char to an int via String conversion and parsing.
char
to int
conversion but provides robust error handling for non-digit characters.