Making a Difference Resources
2.8 Decision Making: Equality and Relational Operators
You can useredundant parentheses(unnecessary parentheses) to make an expression clearer. For example, the preceding statement might be parenthesized as follows:
2.8 Decision Making: Equality and Relational Operators 57
Standard algebraic equality or relational operator
Java equality or relational operator
Sample Java condition
Meaning of Java condition
Equality operators
= == x == y xis equal toy
≠ != x != y xis not equal toy
Relational operators
> > x > y xis greater thany
< < x < y xis less thany
≥ >= x >= y xis greater than or equal toy
≤ <= x <= y xis less than or equal toy Fig. 2.14 | Equality and relational operators.
1 // Fig. 2.15: Comparison.java
2 // Compare integers using if statements, relational operators 3 // and equality operators.
4 import java.util.Scanner; // program uses class Scanner 5
6 public class Comparison 7 {
8 // main method begins execution of Java application 9 public static void main( String[] args )
10 {
11 // create Scanner to obtain input from command line 12 Scanner input = new Scanner( System.in );
13
14 int number1; // first number to compare 15 int number2; // second number to compare 16
17 System.out.print( "Enter first integer: " ); // prompt 18 number1 = input.nextInt(); // read first number from user 19
20 System.out.print( "Enter second integer: " ); // prompt 21 number2 = input.nextInt(); // read second number from user 22
23 24 25 26 27 28 29 30 31
Fig. 2.15 | Compare integers usingifstatements, relational operators and equality operators.
(Part 1 of 2.)
if ( number1 == number2 )
System.out.printf( "%d == %d\n", number1, number2 );
if ( number1 != number2 )
System.out.printf( "%d != %d\n", number1, number2 );
if ( number1 < number2 )
System.out.printf( "%d < %d\n", number1, number2 );
The declaration of classComparisonbegins at line 6
The class’smainmethod (lines 9–40) begins the execution of the program. Line 12
declaresScannervariableinputand assigns it aScannerthat inputs data from the stan- dard input (i.e., the keyboard).
Lines 14–15
declare theintvariables used to store the values input from the user.
Lines 17–18
prompt the user to enter the first integer and input the value, respectively. The input value is stored in variablenumber1.
32 33 34 35 36 37 38 39
40 } // end method main 41 } // end class Comparison
Enter first integer: 777 Enter second integer: 777 777 == 777
777 <= 777 777 >= 777
Enter first integer: 1000 Enter second integer: 2000 1000 != 2000
1000 < 2000 1000 <= 2000
Enter first integer: 2000 Enter second integer: 1000 2000 != 1000
2000 > 1000 2000 >= 1000
public class Comparison
Scanner input = new Scanner( System.in );
int number1; // first number to compare int number2; // second number to compare
System.out.print( "Enter first integer: " ); // prompt number1 = input.nextInt(); // read first number from user
Fig. 2.15 | Compare integers usingifstatements, relational operators and equality operators.
(Part 2 of 2.)
if ( number1 > number2 )
System.out.printf( "%d > %d\n", number1, number2 );
if ( number1 <= number2 )
System.out.printf( "%d <= %d\n", number1, number2 );
if ( number1 >= number2 )
System.out.printf( "%d >= %d\n", number1, number2 );
2.8 Decision Making: Equality and Relational Operators 59
Lines 20–21
prompt the user to enter the second integer and input the value, respectively. The input value is stored in variablenumber2.
Lines 23–24
compare the values ofnumber1 andnumber2 to determine whether they’re equal. Anif statement always begins with keywordif, followed by a condition in parentheses. Anif statement expects one statement in its body, but may contain multiple statements if they’re enclosed in a set of braces ({}). The indentation of the body statement shown here is not required, but it improves the program’s readability by emphasizing that the state- ment in line 24is part oftheifstatement that begins at line 23. Line 24 executes only if the numbers stored in variablesnumber1andnumber2are equal (i.e., the condition is true).
Theifstatements in lines 26–27, 29–30, 32–33, 35–36 and 38–39 comparenumber1and
number2using the operators!=,<,>,<= and>=, respectively. If the condition in one or more of theifstatements is true, the corresponding body statement executes.
There’s no semicolon (;) at the end of the first line of eachifstatement. Such a semi- colon would result in a logic error at execution time. For example,
would actually be interpreted by Java as
where the semicolon on the line by itself—called theempty statement—is the statement to execute if the condition in theifstatement is true. When the empty statement executes, no task is performed. The program then continues with the output statement, which al- ways executes, regardless of whether the condition is true or false, because the output state- ment is not part of theifstatement.
System.out.print( "Enter second integer: " ); // prompt number2 = input.nextInt(); // read second number from user
if ( number1 == number2 )
System.out.printf( "%d == %d\n", number1, number2 );
Common Programming Error 2.6
Confusing the equality operator,==, with the assignment operator,=, can cause a logic er- ror or a syntax error. The equality operator should be read as “is equal to” and the assign- ment operator as “gets” or “gets the value of.” To avoid confusion, some people read the equality operator as “double equals” or “equals equals.”
Good Programming Practice 2.11
Placing only one statement per line in a program enhances program readability.
if ( number1 == number2 ); // logic error
System.out.printf( "%d == %d\n", number1, number2 );
if ( number1 == number2 )
; // empty statement
System.out.printf( "%d == %d\n", number1, number2 );
Common Programming Error 2.7
Placing a semicolon immediately after the right parenthesis of the condition in anifstate- ment is normally a logic error.
Note the use of white space in Fig. 2.15. Recall that the compiler normally ignores white space. So, statements may be split over several lines and may be spaced according to your preferences without affecting a program’s meaning. It’s incorrect to split identifiers and strings. Ideally, statements should be kept small, but this is not always possible.
Figure 2.16 shows the operators discussed so far in decreasing order of precedence. All but the assignment operator,=, associate from left to right. The assignment operator,=, asso- ciates from right to left, so an expression likex = y = 0is evaluated as if it had been written asx = (y = 0), which first assigns the value0to variabley, then assigns the result of that assignment,0, tox.