Java Proto3是否将默认值设置为字段?

Java Proto3是否将默认值设置为字段?,java,protocol-buffers,Java,Protocol Buffers,在proto3中为字段设置默认值有意义吗 如果我有 message MyMsg { bool some_bool; } 在我的java代码中 MyMsg instance = MyMsg.newBuilder().setSomeBool(false).build(); sendOffMyMsgOverTheWrite(instance); 上面的代码段和下面的代码段有什么区别吗 MyMsg instance = MyMsg.newBuilder().build(); //not sett

在proto3中为字段设置默认值有意义吗

如果我有

message MyMsg {
  bool some_bool;
}
在我的java代码中

MyMsg instance = MyMsg.newBuilder().setSomeBool(false).build();
sendOffMyMsgOverTheWrite(instance);
上面的代码段和下面的代码段有什么区别吗

MyMsg instance = MyMsg.newBuilder().build(); //not setting someBool explicitly to false.
sendOffMyMsgOverTheWrite(instance);

proto3
中的all是否有任何差异?我认为,因为默认情况下所有字段都是可选的,所以序列化不应该有什么不同

从语义上说,是的:这不应该有什么区别——不过,我不能具体地给出关于JavaAPI的明确答案;理论上,它可以从内部了解对象模型中的差异;但是你是对的:proto3中的序列化输出应该是相同的(在proto2中这可能不同,因此这实际上取决于生成代码是否区分proto2/proto3,或者它是否共享相同的核心)