Строки, массивы и перечисления являются частными случаями в сериализации и не сериализуются через readObject/writeObject, как и другие объекты.
Вот комментарий от String.java:
/**
* Class String is special cased within the Serialization Stream Protocol.
*
* A String instance is written initially into an ObjectOutputStream in the
* following format:
* <pre>
* <code>TC_STRING</code> (utf String)
* </pre>
* The String is written by method <code>DataOutput.writeUTF</code>.
* A new handle is generated to refer to all future references to the
* string instance within the stream.
*/
и здесь особые случаи из ObjectOutputStream.java:
// remaining cases
if (obj instanceof String) {
writeString((String) obj, unshared);
} else if (cl.isArray()) {
writeArray(obj, desc, unshared);
} else if (obj instanceof Enum) {
writeEnum((Enum) obj, desc, unshared);
} else if (obj instanceof Serializable) {
writeOrdinaryObject(obj, desc, unshared);
} else {
if (extendedDebugInfo) {
throw new NotSerializableException(
cl.getName() + "\n" + debugInfoStack.toString());
} else {
throw new NotSerializableException(cl.getName());
}
}
Одно замечание: 'String' просто оберткой' char' массив. Это не похоже на пример в пункте 76, где происходит специальная проверка экземпляров 'Date' (т. Е. В примере« конец »должен быть больше, чем« start »). – Powerlord
Спасибо за ответ, но char [] также является изменчивым государством? –