繁体   English   中英

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

[英]Behaviour of assignment operator for optional fields in protobuf

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

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

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

我的问题是:

当我执行oMessage1 = oMessage2oMessage1 = oMessage2optionalField的值会oMessage1

  1. 它消失了吗? (因为oMessage2没有它)或
  2. 是否保持不变? (因为oMessage1拥有它,因此赋值运算符已注意不要用不存在的字段覆盖它)

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

提前谢谢了!

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM