Strings are objects, and String is not a primitive type.
Class String is indeed immutable, which means that once you've created a String object, you cannot change its contents. But that does not have anything to do with it being a primitive type or reference type. Primitive types are not immutable, the sentence "Strings behave like a primitive because they are immutable" does not make sense.
Java has a fixed set of primitive types: byte, short, int, long, char, boolean, float, double
All other types are reference types.