当前位置: 首页 > 知识库问答 >
问题:

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

糜宜民
2023-03-14

我在我的. protohtml" target="_blank">文件中定义了一个消息消息。它有两个字段,一个必填字段和一个可选字段。

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

生成Java代码有其关联的类Message,我有它的两个对象oMessage1

我的问题是:

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

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

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

非常感谢!

共有1个答案

谢哲瀚
2023-03-14

对于对象变量,Java中的赋值操作符只分配引用。oMessage1也只会指向oMessage2所表示的对象。分配后访问oMessage1与访问oMessage2完全相同。

oMessage1引用的协议缓冲区可能会完全消失(=

 类似资料:
  • 有人能解释下面代码的输出吗 我无法理解它是如何给出10的?

  • 我有一个csv,它具有以下结构:

  • 我在解析后通过检索表单数据来填充 我希望检查从表单中获得的字段是否为空,如果是空,则通过调用函数填充它,如果不是,则使用检索到的值填充它(invitecode:if newuser.invitecode==“”{“mr”}else{lnames.title},)。我知道go没有一个tenary运算符,我想要使用这个运算符,阅读这里的问题,这里的问题,这里的问题,这里的问题意味着使用一个if els

  • 我有一个客户机-服务器应用程序,其中服务器以protobuf格式将序列化对象传输给客户机,我想注销一个

  • 我想格式化一个<code>java.time。LocalTime,但格式可以根据其值而变化: 如果一天中的小时数为12或0,请使用格式 否则,请使用格式 我当然可以这样做: 但为此,我需要创建两个不同的格式化程序。 我只想使用一个可以多次重用的格式化程序: 我正在尝试使用来做到这一点: 我尝试使用< code > datetimeformatterbuilder . optional start(

  • 本文向大家介绍C#中字段、属性、只读、构造函数赋值、反射赋值的问题,包括了C#中字段、属性、只读、构造函数赋值、反射赋值的问题的使用技巧和注意事项,需要的朋友参考一下 C#中字段、属性和构造函数赋值的问题提出问题如下所述: 首先提出几个问题: 1、如何实现自己的注入框架? 2、字段和自动属性的区别是什么? 3、字段和自动属性声明时的直接赋值和构造函数赋值有什么区别? 4、为什么只读字段和只读自动属