Java Programming - Assertions - Discussion


public class Test2 
    public static int x;
    public static int foo(int y) 
        return y * 2;
    public static void main(String [] args) 
        int z = 5;
        assert z > 0; /* Line 11 */
        assert z > 2: foo(z); /* Line 12 */
        if ( z < 7 )
            assert z > 4; /* Line 14 */

        switch (z) 
            case 4: System.out.println("4 ");
            case 5: System.out.println("5 ");
            default: assert z < 10;

        if ( z < 10 )
            assert z > 4: z++; /* Line 22 */
which line is an example of an inappropriate use of assertions?

[A]. Line 11
[B]. Line 12
[C]. Line 14
[D]. Line 22

Answer: Option D


Assert statements should not cause side effects. Line 22 changes the value of z if the assert statement is false.

Option A is fine; a second expression in an assert statement is not required.

Option B is fine because it is perfectly acceptable to call a method with the second expression of an assert statement.

Option C is fine because it is proper to call an assert statement conditionally.

Starrer said: (Sep 13, 2014)  
Why the answer is 22 and not 11?

Nikola said: (Sep 16, 2015)  
Why the answer is 22 and not 12? At line 12 also z is changed?

Vspider said: (Aug 27, 2020)  
Assertion is majorly used to debug any java code. In option D it is changing the value of variable which effects the flow of code i.e. it changes the further working of code. Now in option B the value of z is not changed because of assertion but is changed because of function. And the value of 'z' is same even after the call. Where as in Option D assertion changes the value keep in mind that assertion is for debugging and not for modifying. That is why we use it on private variables whose scope is limited to class and change is detected there itself. We avoid using assertion on public variables.

Post your comments here:

Name *:

Email   : (optional)

» Your comments will be displayed only after manual approval.