Hi,
the original question was quite interesting.
My explanations is: your put string 42 to the map. This value later is coerced to boolean using
java.lang.Boolean.valueOf(STRING) function (see JSP 2.0 specification, page 116). Because mentioned function returns
true only if STRING value is "true", you get the "false" value for expression
map.c and finally true (
${not map.c}) on your page.