used Han (Chinese) ideographs, occupy 21 bits and cannot be represented in a sin‐
gle char value. Instead, you must use an int value to hold the codepoint of a sup‐
plementary character, or you must encode it into a so-called “surrogate pair” of two
Unless you commonly write programs that use Asian languages, you are unlikely to
encounter any supplementary characters. If you do anticipate having to process
characters that do not fit into a char , methods have been added to the Character ,
String , and related classes for working with text using int codepoints.
In addition to the char type, Java also has a data type for working with strings of
text (usually simply called strings ). The String type is a class, however, and is not
one of the primitive types of the language. Because strings are so commonly used,
though, Java does have a syntax for including string values literally in a program. A
String literal consists of arbitrary text within double quotes (as opposed to the sin‐
gle quotes for char literals). For example:
"'This' is a string!"
String literals can contain any of the escape sequences that can appear as char liter‐
als (see Table 2-2 ). Use the \ " sequence to include a double quote within a String
literal. Because String is a reference type, string literals are described in more detail
later in this chapter in “Object Literals” on page 74 . Chapter 9 contains more details
on some of the ways you can work with String objects in Java.
The integer types in Java are byte , short , int , and long . As shown in Table 2-1 ,
these four types differ only in the number of bits and, therefore, in the range of
numbers each type can represent. All integral types represent signed numbers; there
is no unsigned keyword as there is in C and C++.
Literals for each of these types are written exactly as you would expect: as a string of
decimal digits, optionally preceded by a minus sign. 1 Here are some legal integer
Integer literals can also be expressed in hexadecimal, binary, or octal notation. A lit‐
eral that begins with 0x or 0X is taken as a hexadecimal number, using the letters A
to F (or a to f ) as the additional digits required for base-16 numbers.
1 Technically, the minus sign is an operator that operates on the literal, but is not part of the literal