Question:
In C++, when a programmer intends to write:
if (value == 1) {
But, they often make the following mistake:
if (value = 1) {......
Why doesn’t this problem exist in Java?
Answer:
In C and C++ a non-zero value evaluates to a true boolean expressionand a zero value equates to false. Even though C++ has introducedthe bool type, this behavior is still supported. Therefore, if youaccidentally write the expression value = 1
, it evaluatesto the integer value of 1, which represents a true boolean value.
Youcannot do this in Java because all boolean expressions must evaluateto a value of type boolean, either true or false. It is not possibleto coerce integer types to boolean types. Therefore, if you reallydo mean if(value = 1)
in C/C++, you would have to writeif((value = 1) == 1)
in Java. This makes you more likelyto write what you mean.
But the awkward transliteration of the C idiomactually makes it preferable in Java to just assign the value first, and then perform a test, such as:
value = foo;if(value == bar) {...}