?

Log in

No account? Create an account
Java is lame yet again - The Mad Schemes of Dr. Tectonic [entries|archive|friends|userinfo]
Beemer

[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

Java is lame yet again [Nov. 15th, 2006|03:44 pm]
Beemer
Things to hate about Java, #5801:

I get why Java has both Strings and StringBuffers. There are advantages to each, and times when you want to use one rather than the other.

Like, if you're building a long string up out of a lot of little pieces, it's a whole lot more efficient to do it with a StringBuffer, which is designed for that kind of thing, than do it with Strings, because they're immutable and the '+' operator gets translated invisibly into a temporary StringBuffer and some calls to append(), so why not do it that way explicitly in the first place, right?

So, given that the number-one usage of StringBuffer is almost certain to be to concatenating a bunch of Strings together, and given that StringBuffer is just as much a part of the Java language core as String, and given that you can use the '+' and '+=' operators on Strings...

Why in the name of all that is holy is '+=' NOT aliased to 'append()' for StringBuffers?

Argh, I say. Argh.
LinkReply

Comments:
[User Picture]From: flwyd
2006-11-15 11:34 pm (UTC)
String addition is weird anyway. Unlike almost every other addition context, String + is not associative, so a + b != b + a (except in the case where one or both are the empty string or are identical). Furthermore, both int + String and String + int produce a String. This is in keeping with the fact that int + double and double + int return doubles, not ints. But it also means that Object + String and String + Object both produce Strings. Which restricts the ability to add operator overloading in the future in a sane way while maintaining backward semantics. (E.g. you can't dynamically dispatch + to the first argument unless you have Object declare a final +(String) implementation. And then objects can subtract Strings, but not add them...)
(Reply) (Parent) (Thread)
[User Picture]From: flwyd
2006-11-15 11:36 pm (UTC)
Did I say associative? I meant commutative.
(Reply) (Parent) (Thread)