| This particular instance of stupid code has more than one skin. A common manifestation is, for instance, returning from a function with return new Boolean(true);or return new Boolean(false);
Why would anyone instantiate a new instance of class java.lang.Boolean?!
Clearly it is obvious that there are only two possible instances of class
Boolean - Boolean.TRUE and Boolean.FALSE. Looking under the outer skin, we find another piece of stupid code: the Java implementation itself sucks. Why did Sun engineers leave a non-private constructor in the Boolean wrapper class?
The Java 2 documentation
weasels out: Note: It is rarely appropriate to use this constructor. Unless a new Note that valueOf(boolean) appeared only in 1.4. Before that the
preferred method was Boolean instance = bool ? Boolean.TRUE : Boolean.FALSE; In either case only the static instances are used. Actually, the documentation is a cover-up. If you are a registered member of Sun Developer Network, you can look at this bug report (#4792325). I am not sure if I can reproduce the bug description verbatim here - it might break all sorts of IP restrictions. Anyway, it basically says that the bug is real, exists on all platforms, is always reproducible, is simple to fix, and won't be fixed because it's too late and will break tons of existing code that calls the public constructor. If it were fixed though programs would use much less memory and Booleans could be compared for identity with "==" & "!=". A classic example of stupid code that cannot even be fixed. |