Если объявлять данные-члены как примитивные типы данных, будут ли сериализованы значения, если объект объявлен сериализуемым? - PullRequest
5 голосов
/ 13 июня 2011

У меня есть вопрос о том, имеет ли использование использования примитивного типа данных в отличие от их счетчиков обертки какое-либо влияние на их сериализацию?

Например, у меня есть класс Person

public class Person implements Serializable{
private int age;
}

в отличие от

public class Person implements Serializable{
private Integer age;
}

В чем их различия?

Ответы [ 2 ]

6 голосов
/ 13 июня 2011

Ну, точный формат сериализации будет немного отличаться (только 32-битный по сравнению с сериализованным объектом Integer, содержащим 32-битный и заголовок), но оба будут сериализованы и десериализованы просто отлично.* Если объявлять данные элемента как примитивные типы данных, будут ли сериализованы значения, если объект объявлен сериализуемым?

Да, все, что не отмечено transient, будет сериализовано, включая примитивы.1009 * Что вы пытаетесь сделать?

5 голосов
/ 13 июня 2011

Я говорю с точки зрения сериализации Java:

В то время как int является примитивным типом, который хранит только значение переменной (в двоичном виде), объект Integer (используя * 1005)*) будет хранить некоторые «метаданные», которые при десериализации будут видеть объект Integer.

Да, сериализация хранит не только объект, но и состояния объекта, поэтому если вы сохраняете,

private Integer value = 5;

Значение «обернуто» (отсутствие лучшего слова) внутри Integer, и весь объект сохраняется.

Добавлено примечание: в порядке не чтобы сохранить объект / переменную, пометьте поле с помощью transient, .eg

transient private Integer value = 5;

Связанные ресурсы:

...