protobuf中可选字段的赋值运算符的行为

时间:2016-06-06 11:47:17

标签: java protocol-buffers

我的.proto文件中定义了消息Message。它有两个字段,一个必填字段和一个可选字段。

message Message
{
    required int32 requiredField = 1;
    optional int32 optionalField = 2;
}

生成的Java代码具有关联的class Message,我有两个对象oMessage1& oMessage2oMessage1在其optionalField中保留了一些值,但oMessage2未保留任何值(作为其可选项)。

我的问题是:

当我执行oMessage1 = oMessage2时,optionalField oMessage1的值会发生什么变化?

  1. 它消失了吗? (因为oMessage2没有它) OR
  2. 它是否保持不变? (因为oMessage1拥有,因此赋值运算符已经注意不要用不存在的字段覆盖它)
  3. 我在文档中找不到答案。生成的代码对我来说太大了,因为我对Java相对较新:(理想情况下,我期待#2是一个答案。但我想与Protobuf专家核实,以便我可以在我的代码中处理它。< / p>

    非常感谢提前!

1 个答案:

答案 0 :(得分:1)

对于对象变量,Java中的赋值运算符只分配引用。 oMessage1也将指向oMessage2表示的对象。访问oMessage1与分配后访问oMessage2相同。

oMessage1引用的协议缓冲区可能会完全消失(=由garabge集合收集),如果没有其他内容可以引用它。