Declaring and initializing char variables
char c1 = 'a';
char c2 = 98;
System.out.println(c1); // prints a
System.out.println(c2); // prints b
char c3 = -1; // compile time error
Java uses Unicode to represent char values. Setting a char variable to an int that corresponds to a Unicode character is equivalent to setting the variable to that character. Setting a char variable to an int value that does not represent a Unicode character results in a compile time error.
Converting between char and int
char letter = 'A';
int unicode = letter;
System.out.println(unicode); // prints 65
int otherUnicode = 98;
char otherLetter = (char) otherUnicode;
System.out.println(otherLetter); // prints b
Storing the value of letter in unicode does not require a cast. All possible Unicode values can be stored in a variable of type int.
Storing the value of otherUnicode in otherLetter requires a cast. It is possible to store values in otherUnicode that do not correspond to Unicode characters.
Operations with char values
char letter1 = 'A';
System.out.println(letter1 + 2); // prints 67
char letter2 = 'B';
letter2 = (char) (letter2 + 2);
System.out.println(letter2); // prints D
char letter3 = 'C';
letter3 += 2;
System.out.println(letter3); // prints E
An operation performed on a char value is actually performed on the Unicode value.
The Unicode value of 'A' is 65. 65 + 2 is 67.
The Unicode value of 'B' is 66. 66 + 2 is 68. 68 is the Unicode value of 'D'.
The += operator can be used to avoid the cast when the left hand operand is a char. The -=, ++, and -- operators work similiarly.
System.out.println('a' + 'b'); // prints 195
System.out.println("a" + "b"); // prints ab
When both operands are of type char, the + operator acts as addition. The Unicode value of 'a' is 97. The Unicode value of 'b' is 98. 97 + 98 is 195.
"a" is of type String. See Working with String objects for more details.
Comparing char values for equality
char letter = 'a';
System.out.println(letter == 'a'); // prints true
System.out.println(letter == 'b'); // prints false
System.out.println(letter == 'A'); // prints false
System.out.println(letter != 'h'); // prints true
char values are compared for equality using the == operator and for inequality using the != operator.
Comparing char values for order
char c = /* value not shown */;
if(c >= 'A' && c <= 'Z')
System.out.println("uppercase letter");
else
System.out.println("not uppercase letter");
When the comparison operators are used with char values, the Unicode values are compared. The example above correctly checks if the value of c is an uppercase letter.
The condition can also be written as c >= 65 && c <= 90.
Looping through char values
for(char letter = 'a'; letter <= 'z'; letter += 2)
System.out.print(letter);
The example above prints acegikmoqsuwy.
Additional resources
Java Primitive Data Types (Oracle)