Which command-line invocation will produce the output found?
a) java -Dx=y x y z
b) java -Px=y x y z
c) java -Dx=y x x y z
d) java -Px=y x x y z
e) java x x y z -Dx=y
f) java x x y z -Px=y

Option C is correct. -D sets a property and args[1] is the second argument (whose value is y)

This is what I understand:

1. The program is assigning the system property of "x" to String 2. When the runtime environment is invoked with c) java -Dx=y x x y z , it is setting the system property of "x" to "y". Then the program x is invoked. Next, args[0] get the value of "x". Then, args[1] gets the value of "y". This value of "y" is equal to the system value of "x", which is "y". Hence, "found" is printed.

Since there is no property with the name x, so String p will be null. Then calling equals method on the null reference will result in a NullPointerException...