代码之家  ›  专栏  ›  技术社区  ›  AntG

java如何分配内存中对象的属性?

  •  2
  • AntG  · 技术社区  · 8 年前

    我有一个表示一组属性的类,但是当序列化它时,我注意到它们是按字母顺序重新排序的。经过调查,这是因为这些属性是如何保存在内存中的。

    类声明:

    enter image description here

    在完成任何序列化之前,内存中的对象:

    enter image description here

    这是android studio在Debug中运行的一个“特性”,还是发生了其他事情?

    2 回复  |  直到 8 年前
        1
  •  1
  •   OhleC    8 年前

    正如其他人指出的,IDEA中的debug variables视图并没有直接反映内存布局;它只是IntelliJ做出的一个GUI选择。你一般不应该认为变量有任何顺序。把它们放入源代码的顺序是不相关的。

    由于字段没有顺序,而且JSON规范还声明字段没有顺序,GSON可以自由选择序列化的顺序。IntelliJ(用于GUI)和GSON(用于序列化)都选择了字母顺序,因为这是最方便用户使用的。

    如果在JSON中必须有不同的顺序(可能是因为您的数据是由违反JSON规范的软件根据特定顺序使用的),请参见 this answer

        2
  •  3
  •   Karol Dowbecki    8 年前

    Android Studio/IntelliJ有几个选项用于配置调试器如何显示数据。这在 the docs for Variables pane . 排序由 Sort Values Alphabetically option in the Debug Tool Window

    这纯粹是表面的,与内存中的实际对象布局无关。Java附带 JOL 工具,但我不确定它是否适用于Android: