# Using the digits and and the prefix

CHAPTER 2. NAMES AND THINGS 25

There are eight so-called primitive types built into Java. The primitive types are named byte, short, int, long, float, double, char, and boolean. The first four types hold integers (whole numbers such as 17, -38477, and 0). The four integer types are distinguished by the ranges of integers they can hold. The float and double types hold real numbers (such as 3.6 and-145.99). Again, the two real types are distinguished by their range and accuracy. A variable of type char holds a single character from the Unicode character set. And a variable of type boolean holds one of the two logical values true or false.

You don’t have to remember these numbers, but they do give you some idea of the size of integers that you can work with. Usually, for representing integer data you should just stick to the int data type, which is good enough for most purposes.

The float data type is represented in four bytes of memory, using a standard method for encoding real numbers. The maximum value for a float is about 10 raised to the power 38. A float can have about 7 significant digits. (So that 32.3989231134 and 32.3989234399 would both have to be rounded off to about 32.398923 in order to be stored in a variable of type float.) A double takes up 8 bytes, can range up to about 10 to the power 308, and has about 15 significant digits. Ordinarily, you should stick to the double type for real values.

CHAPTER 2. NAMES AND THINGS 26

form such as 1.3e12 or 12.3737e-108. The “e12” and “e-108” represent
powers of 10, so that 1.3e12 means 1.3 times 1012and 12.3737e-108 means
12.3737 times 10−108. This format can be used to express very large and
very small numbers. Any numerical literal that contains a decimal point
or exponential is a literal of type double. To make a literal of type
float, you have to append an “F” or “f” to the end of the number. For
example, “1.2F” stands for 1.2 considered as a value of type float.
(Occasionally, you need to know this because the rules of Java say that
you can’t assign a value of type double to a variable of type float, so
you might be confronted with a ridiculous-seeming error message if you
try to do something like “x = 1.2;”when x is a variable of type float.
You have to say “x = 1.2F;". This is one reason why I advise sticking to
type double for real numbers.)

Even for integer literals, there are some complications. Ordinary
integers such as 177777 and -32 are literals of type byte, short, or
int, depending on their size. You can make a literal of type long by
adding “L” as a suffix. For example: 17L or 728476874368L. As another
complication, Java allows octal (base-8) and hexadecimal (base-16)
literals. I don’t want to cover base-8 and base-16 in detail, but in
case you run into them in other people’s programs, it’s worth knowing a
few things: Octal numbers use only the digits 0 through 7. In Java, a
numeric literal that begins with a 0 is interpreted as an octal number;
for example, the literal 045 represents the number 37, not the number
45. Hexadecimal numbers use 16 digits, the usual digits 0 through 9 and
the letters A, B, C, D, E, and F. Upper case and lower case letters can
be used interchangeably in this context. The letters represent the
numbers 10 through 15. In Java, a hexadecimal literal begins with 0x or
0X, as in 0x45 or 0xFF7A.

rate > 0.05

is a boolean-valued expression that evaluates to true if the value of the variable rate is greater than 0.05, and to false if the value of rate is not greater than 0.05. As you’ll see in Chapter 3, boolean-valued expressions are used extensively in control structures. Of course, boolean values can also be assigned to variables of type boolean.