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

Behaviour of assignment operator for optional fields in protobuf

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

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

Java 生成的代码有其关联的 class Message,我有它的两个对象 oMessage1oMessage2oMessage1 在其 optionalField 中持有一些价值,但 oMessage2 在其中没有持有任何价值(作为其可选)。

我的问题是:

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

  1. 它消失了吗? (因为oMessage2没有) 或者
  2. 还是一样吗? (因为 oMessage1 拥有它 因此 赋值运算符注意不要用不存在的字段覆盖它)

我在文档中找不到它的答案。生成的代码太大,我无法分析,因为我对 Java 比较陌生 :( 理想情况下,我希望 #2 是一个答案。但我想与 Protobuf 专家进行验证,以便我可以在我的代码。

非常感谢!

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

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