Normally what you call a "Constant Object" is called 'type-safe enum'. I don't really care for the way you use the term constant in relation to Java as there are no constants in Java. There are only finals. Calling them constants is confusing.
But that's not really what this post is about. While I agree with the use of enums if you have the ability to use 1.5, the example of a "Constant Object" could cause problems for an unsuspecting developer. If any of the instances of the Rainbow class you give are serialized and then deserialized, they will create new instances of the class that are not referenced by the class members.
If you are going to provide this example as a way to avoid bugs you need to mention that a good bit of extra work is required to make it serialize and deserialize properly. The example you give will likely introduce new bugs if used with serialization.