Find Correct Statements

Question 1 :

import java.awt.*;
class Ticker extends Component 
{
    public static void main (String [] args) 
    {
        Ticker t = new Ticker();
        /* Missing Statements ? */
    }
}
which two of the following statements, inserted independently, could legally be inserted into missing section of this code?

1. boolean test = (Component instanceof t);
2. boolean test = (t instanceof Ticker);
3. boolean test = t.instanceof(Ticker);
4. boolean test = (t instanceof Component);


A). 1 and 4
B). 2 and 3
C). 1 and 3
D). 2 and 4
Answer : Option D

Explanation :

(2) is correct because class type Ticker is part of the class hierarchy of t; therefore it is a legal use of the instanceof operator. (4) is also correct because Component is part of the hierarchy of t, because Ticker extends Component.

(1) is incorrect because the syntax is wrong. A variable (or null) always appears before the instanceof operator, and a type appears after it. (3) is incorrect because the statement is used as a method (t.instanceof(Ticker);), which is illegal.


Question 2 :

Which of the following are legal lines of code?
1. int w = (int)888.8;
2. byte x = (byte)1000L;
3. long y = (byte)100;
4. byte z = (byte)100L;


A). 1 and 2
B). 2 and 3
C). 3 and 4
D). All statements are correct.
Answer : Option D

Explanation :

Statements (1), (2), (3), and (4) are correct. (1) is correct because when a floating-point number (a double in this case) is cast to an int, it simply loses the digits after the decimal.

(2) and (4) are correct because a long can be cast into a byte. If the long is over 127, it loses its most significant (leftmost) bits.

(3) actually works, even though a cast is not necessary, because a long can store a byte.


Question 3 :

Which two statements are equivalent?

1. 16*4
2. 16>>2
3. 16/2^2
4. 16>>>2


A). 1 and 2
B). 2 and 4
C). 3 and 4
D). 1 and 3
Answer : Option B

Explanation :

(2) is correct. 16 >> 2 = 4
(4) is correct. 16 >>> 2 = 4
(1) is wrong. 16 * 4 = 64
(3) is wrong. 16/2 ^ 2 = 10


Question 4 :

Which two statements are equivalent?

1. 3/2
2. 3<2
3. 3*4
4. 3<<2


A). 1 and 2
B). 2 and 3
C). 3 and 4
D). 1 and 4
Answer : Option C

Explanation :

(1) is wrong. 3/2 = 1 (integer arithmetic).
(2) is wrong. 3 < 2 = false.
(3) is correct. 3 * 4 = 12.
(4) is correct. 3 <<2= 12. In binary 3 is 11, now shift the bits two places to the left and we get 1100 which is 12 in binary (3*2*2).


Question 5 :

import java.awt.Button;
class CompareReference 
{
    public static void main(String [] args) 
    {
        float f = 42.0f;
        float [] f1 = new float[2];
        float [] f2 = new float[2];
        float [] f3 = f1;
        long x = 42;
        f1[0] = 42.0f;
    }
}
which three statements are true? 1. f1 == f2 2. f1 == f3 3. f2 == f1[1] 4. x == f1[0] 5. f == f1[0]


A). 1, 2 and 3
B). 2, 4 and 5
C). 3, 4 and 5
D). 1, 4 and 5
Answer : Option B

Explanation :

(2) is correct because the reference variables f1 and f3 refer to the same array object.

(4) is correct because it is legal to compare integer and floating-point types.

(5) is correct because it is legal to compare a variable with an array element.

(3) is incorrect because f2 is an array object and f1[1] is an array element.


Question 6 :

Which two are equal?

1. 32/4
2. (8 >> 2) << 4
3. 2^5
4. 128 >>> 2
5. 2 >> 5


A). 1 and 2
B). 2 and 4
C). 1 and 3
D). 2 and 3
Answer : Option B

Explanation :

(2) and (4) are correct. (2) and (4) both evaluate to 32. (2) is shifting bits right then left using the signed bit shifters >> and <<. (4) is shifting bits using the unsigned operator >>>, but since the beginning number is positive the sign is maintained.

(1) evaluates to 8, (3) looks like 2 to the 5th power, but ^ is the Exclusive OR operator so (3) evaluates to 7. (5) evaluates to 0 (2 >> 5 is not 2 to the 5th).