class W {
static int count=0;
W() {
count++;
System.out.print("c ");
}
public static void main(String[] args) {
System.out.println(new W().count+" "+new W().count);
}
}
Expected output
c 1 c 2
Actual output
c c 1 2
Why?
The actual order of things executed by the JVM is as follows:
1st W
object is instantiated and its count
property read.
Here the first c
is send to output.
2nd W
object is instantiated and its count
property read.
Here the second c
is send to output.
The string argument for System.out.println()
is built. ( == "1 2"
)
The string argument is sent to the output.
Thus the output results to c c 1 2
.
In this line:
System.out.println(new W().count+" "+new W().count);
The instances of W
are instantiated prior to the evaluation of the rest of the statement.
The order of operations is:
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With