1. Primtives as objects
2. Operator overloadingvar x = 100++;
Not sure I get it. Are you saying that you'd like to be able to do that, or that it would be Evil?
To me, the immutability of an object is a separate matter from whether it follows primitive or object semantics, and the immutability of a literal should make that code snippet illegal, not the fact that integers are primitives.
I think Scala pretty much gets it right - everything is an object as far as the language is concerned (even integer literals effectively have methods, for instance 0.until(100) generates a list from 0 to 99), but under the hood optimizations are applied so that there's not too much autoboxing going on if it's not necessary.
It's only comfortable there because operator overloading and infix notation are allowed, though.
My main object vs. primitive gripe in Java is that primitives are "blessed" by the language, in the sense that you can't define your own, you just have to be thankful for the few that you have (and there are
too few - if we can't define our own, we should at least have complex and arbitrary precision floats/ints, if not vectors and matrices as well). To be fair, this is true in Scala as well, you can't define your own types and get the performance benefits of primitive types. But at least you can get the same semantics and ease of use, which is a huge win if you ever need to use more complicated number objects.