Integer, Float, Double, Character, Boolean Data Types In Java Explain

Explain Data Types In Java, Integer, Float, Double, Character, Boolean Data Types In Java Explain, How Many data types In Java

In This Topic & Blog Having Any Query Then Post your Comment and Suggestion Below

Java Is a Strongly Typed Language


It is important to state at the outset that Java is a strongly typed language. Indeed, part of
Java’s safety and robustness comes from this fact. Let’s see what this means. First, every
variable has a type, every expression has a type, and every type is strictly defined. Second,
all assignments, whether explicit or via parameter passing in method calls, are checked for
type compatibility. There are no automatic coercions or conversions of conflicting types as
in some languages. The Java compiler checks all expressions and parameters to ensure that
the types are compatible. Any type mismatches are errors that must be corrected before the
compiler will finish compiling the class.
The Primitive Types
Java defines eight  primitive  types of data:
byte short int long char float double

, and
boolean
.
The primitive types are also commonly referred to as  simple  types, and both terms will be
used in this book. These can be put in four groups:
• Integers
This group includes
byte short int
nd
long
, which are for whole-valued
signed numbers.
• Floating-point numbers
This group includes
float
and
double
, which represent
numbers with fractional precision.
33      



Characters
This group includes
char
, which represents symbols in a character set,
like letters and numbers.
 

• Boolean
This group includes
boolean
, which is a special type for representing
true/false values.
You can use these types as-is, or to construct arrays or your own class types. Thus, they
form the basis for all other types of data that you can create.
The primitive types represent single values—not complex objects. Although Java is
otherwise completely object-oriented, the primitive types are not. They are analogous to
the simple types found in most other non–object-oriented languages. The reason for this is
efficiency. Making the primitive types into objects would have degraded performance too much.
The primitive types are defined to have an explicit range and mathematical behavior.
Languages such as C and C++ allow the size of an integer to vary based upon the dictates
of the execution environment. However, Java is different. Because of Java’s portability
requirement, all data types have a strictly defined range. For example, an
int
is always 32 bits,
regardless of the particular platform. This allows programs to be written that are guaranteed
to run  without porting  on any machine architecture. While strictly specifying the size of an
integer may cause a small loss of performance in some environments, it is necessary in order
to achieve portability.
Let’s look at each type of data in turn.
Integers
Java defines four integer types:
byte short int
,
,
, and
long
. All of these are signed, positive
and negative values. Java does not support unsigned, positive-only integers. Many other
computer languages support both signed and unsigned integers. However, Java’s designers
felt that unsigned integers were unnecessary. Specifically, they felt that the concept of  unsigned
was used mostly to specify the behavior of the  high-order bit,  which defines the  sign  of an integer
value. As you will see in Chapter 4, Java manages the meaning of the high-order bit differently,
by adding a special “unsigned right shift” operator. Thus, the need for an unsigned integer type
was eliminated.
The  width  of an integer type should not be thought of as the amount of storage it consumes,
but rather as the  behavior  it defines for variables and expressions of that type. The Java run-time
environment is free to use whatever size it wants, as long as the types behave as you declared
them. The width and ranges of these integer types vary widely, as shown in this table:
Name
Width
Range
long
64
–9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
int
32
–2,147,483,648 to 2,147,483,647
short
16
–32,768 to 32,767
byte
8
–128 to 127        
Let’s look at each type of integer.
34
Part I:
The Java Language


        
byte
The smallest integer type is
byte
.
This is a signed 8-bit type that has a range from –128 to 127.
Variables of type
byte
are especially useful when you’re working with a stream of data from
a network or file. They are also useful when you’re working with raw binary data that may
not be directly compatible with Java’s other built-in types.
Byte variables are declared by use of the
byte
keyword. For example, the following
declares two
byte
variables called
b
and :
c
byte b, c;
short
short
is a signed 16-bit type. It has a range from –32,768 to 32,767. It is probably the least-used
Java type. Here are some examples of
short
variable declarations:
short s;
short t;
int
The most commonly used integer type is
int
.
It is a signed 32-bit type that has a range
from –2,147,483,648 to 2,147,483,647. In addition to other uses, variables of type
int
are
commonly employed to control loops and to index arrays. Although you might think that
using a
byte
or
short
would be more efficient than using an
int
in situations in which the
larger range of an
int
is not needed, this may not be the case. The reason is that when
byte
and
short
values are used in an expression they are  promoted  to
int
when the expression is
evaluated. (Type promotion is described later in this chapter.) Therefore,
int
is often the best
choice when an integer is needed.
long
long
is a signed 64-bit type and is useful for those occasions where an
int
type is not large
enough to hold the desired value. The range of a
long
is quite large. This makes it useful
when big, whole numbers are needed. For example, here is a program that computes the
number of miles that light will travel in a specified number of days.
 

// Compute distance light travels using long variables.
class Light {
public static void main(String args[]) {
int lightspeed;
long days;
long seconds;
long distance;
// approximate speed of light in miles per second
lightspeed = 186000;
days = 1000; // specify number of days here
Chapter 3:
Data T ypes, V ariables, and Arrays
35



36
Part I:
The Java Language
seconds = days * 24 * 60 * 60; // convert to seconds
distance = lightspeed * seconds; // compute distance
System.out.print("In " + days);
System.out.print(" days light will travel about ");
System.out.println(distance + " miles.");
}
}
 

This program generates the following output:
In 1000 days light will travel about 16070400000000 miles.
Clearly, the result could not have been held in an
int
variable.
 

Floating-Point Types
Floating-point numbers, also known as  real  numbers, are used when evaluating expressions
that require fractional precision. For example, calculations such as square root, or transcendentals
such as sine and cosine, result in a value whose precision requires a floating-point type. Java
implements the standard (IEEE–754) set of floating-point types and operators. There are two
kinds of floating-point types,
float
and
double
, which represent single- and double-precision
numbers, respectively. Their width and ranges are shown here:
Name
Width in Bits
Approximate Range
double
64
4.9e–324 to 1.8e+308
float
32
1.4e–045 to 3.4e+038      
Each of these floating-point types is examined next.
float
The type
float
specifies a  single-precision  value that uses 32 bits of storage. Single precision is
faster on some processors and takes half as much space as double precision, but will become
imprecise when the values are either very large or very small. Variables of type
float
are useful
when you need a fractional component, but don’t require a large degree of precision. 

For example,
float
can be useful when representing dollars and cents.
Here are some example
float
 

variable declarations:
float hightemp, lowtemp;
double
Double precision, as denoted by the
double
keyword, uses 64 bits to store a value. Double
precision is actually faster than single precision on some modern processors that have been
optimized for high-speed mathematical calculations. All transcendental math functions, such
as
sin( ) cos( )
,
, and
sqrt( )
, return
double
values. When you need to maintain accuracy over


 many iterative calculations, or are manipulating large-valued numbers,
double
is the best
choice.
Here is a short program that uses
double
variables to compute the area of a circle:
// Compute the area of a circle.
class Area {
public static void main(String args[]) {
double pi, r, a;
r = 10.8; // radius of circle
pi = 3.1416; // pi, approximately
a = pi * r * r; // compute area
System.out.println("Area of circle is " + a);
}
}
 


Characters
In Java, the data type used to store characters is
char
.
However, C/C++ programmers beware:
char
in Java is not the same as
char
in C or C++. In C/C++,
char
is 8 bits wide. This is  not  the
case in Java. Instead, Java uses Unicode to represent characters.  Unicode  defines a fully
international character set that can represent all of the characters found in all human
languages. It is a unification of dozens of character sets, such as Latin, Greek, Arabic, Cyrillic,
Hebrew, Katakana, Hangul, and many more. For this purpose, it requires 16 bits. Thus, in
Java
char
is a 16-bit type. The range of a
char
is 0 to 65,536. There are no negative
char
s.
The standard set of characters known as ASCII still ranges from 0 to 127 as always, and the
extended 8-bit character set, ISO-Latin-1, ranges from 0 to 255. Since Java is designed to
allow programs to be written for worldwide use, it makes sense that it would use Unicode to
represent characters. Of course, the use of Unicode is somewhat inefficient for languages such
as English, German, Spanish, or French, whose characters can easily be contained within 8 bits.
But such is the price that must be paid for global portability.
NOTEOTE
More information about Unicode can be found a t http://www.unicode.o rg.
Here is a program that demonstrates
char
variables:
// Demonstrate char data type.
class CharDemo {
public static void main(String args[]) {
char ch1, ch2;
ch1 = 88;  // code for X
ch2 = 'Y';
System.out.print("ch1 and ch2: ");
System.out.println(ch1 + " " + ch2);
}
}

This program displays the following output:
ch1 and ch2: X Y
Notice that
ch1
is assigned the value 88, which is the ASCII (and Unicode) value that
corresponds to the letter  X.  As mentioned, the ASCII character set occupies the first 127
values in the Unicode character set. For this reason, all the “old tricks” that you may have
used with characters in other languages will work in Java, too.
Although
char
is designed to hold Unicode characters, it can also be thought of as an
integer type on which you can perform arithmetic operations. For example, you can add
two characters together, or increment the value of a character variable. Consider the
following program:
 

// char variables behave like integers.
class CharDemo2 {
public static void main(String args[]) {
char ch1;
ch1 = 'X';
System.out.println("ch1 contains " + ch1);
ch1++; // increment ch1
System.out.println("ch1 is now " + ch1);
}
}
 

The output generated by this program is shown here:
ch1 contains X
ch1 is now Y
In the program,
ch1
is first given the value  X.  Next,
ch1
is incremented. This results in
ch1
containing  Y,  the next character in the ASCII (and Unicode) sequence.
 


Booleans
Java has a primitive type, called
boolean
, for logical values. It can have only one of two
possible values,
true
or
false
. This is the type returned by all relational operators, as in the
case of
a < b boolean
.
is also the type  required  by the conditional expressions that govern
the control statements such as
if
and
for
.
Here is a program that demonstrates the
boolean
type:
// Demonstrate boolean values.
class BoolTest {
public static void main(String args[]) {
boolean b;
b = false;
System.out.println("b is " + b);
b = true;
System.out.println("b is " + b);
// a boolean value can control the if statement



if(b) System.out.println("This is executed.");
b = false;
if(b) System.out.println("This is not executed.");
// outcome of a relational operator is a boolean value
System.out.println("10 > 9 is " + (10 > 9));
}
}
The output generated by this program is shown here:
b is false
b is true
This is executed.
10 > 9 is true
There are three interesting things to notice about this program. First, as you can see, when
a
boolean
value is output by
println( )
, “true” or “false” is displayed. Second, the value of a
boolean
variable is sufficient, by itself, to control the
if
statement. There is no need to write
an
if
statement like this:
if(b == true) ...
Third, the outcome of a relational operator, such as
<
,isa
boolean
value. This is why the
expression
1
0>9
displays the value “true.” Further, the extra set of parentheses around
1
0>9
is necessary because the
+
operator has a higher precedence than the
>

 

Labels: