Java: (new URL("http://foo.com")).equals(new URL("http://bar.foo.com")) returns true if they both resolve to the same IP. Not only does that plainly suck, the effects are that a) equality of two URL objects – two names, as it were – is dependent on whether or not you are connected to the Internet, and b) checking an object’s intrinsic identity and comparing it against another’s requires DNS server access. I have no words.
C#: Extensions are like Objective-C categories but different. This is funny because I thought categories would never come to C#. The ‘non-hacking’ use of categories has always been to split up a class definition into several distinct modules, and this was introduced more rigidly in C# 2.0 with partial, which is only allowed for the class within the same namespace in the same assembly (generated binary or general project grouping).