<div dir="ltr">Hi Remy,<div><br></div><div>Even for a value object field in which the stored VO value is a reference? </div><div><br></div><div>As I understand the spec, it's up to the JVM to choose how to handle a value object (even a null-restricted VO), depending on its size. If a VO field value is a VO, it's optional as to whether the JVM stores that field value as a reference or as a value. What the JVM does will depend on the VO size, right? If a VO field value is stored as a reference, calling == on that reference will behave the same way as calling == on an identity object reference. If the VO is stored as a value (a set of values which could include another VO. field), then the == will be recursive. Am I incorrect?</div><div><br></div><div>John</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Feb 27, 2024 at 3:03 PM <<a href="mailto:forax@univ-mlv.fr">forax@univ-mlv.fr</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div><div style="font-family:arial,helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)"><div><br></div><div><br></div><hr id="m_4740082741614919001zwchr"><div><blockquote style="border-left-width:2px;border-left-style:solid;border-left-color:rgb(16,16,255);margin-left:5px;padding-left:5px;color:rgb(0,0,0);font-weight:normal;font-style:normal;text-decoration:none;font-family:Helvetica,Arial,sans-serif;font-size:12pt"><b>From: </b>"John Bossons" <<a href="mailto:jbossons@gmail.com" target="_blank">jbossons@gmail.com</a>><br><b>To: </b>"Archie Cobbs" <<a href="mailto:archie.cobbs@gmail.com" target="_blank">archie.cobbs@gmail.com</a>><br><b>Cc: </b>"Remi Forax" <<a href="mailto:forax@univ-mlv.fr" target="_blank">forax@univ-mlv.fr</a>>, "Pedro Lamarão" <<a href="mailto:pedro.lamarao@prodist.com.br" target="_blank">pedro.lamarao@prodist.com.br</a>>, "valhalla-dev" <<a href="mailto:valhalla-dev@openjdk.org" target="_blank">valhalla-dev@openjdk.org</a>><br><b>Sent: </b>Tuesday, February 27, 2024 8:36:13 PM<br><b>Subject: </b>Re: Recursively comparing<br></blockquote></div><div><blockquote style="border-left-width:2px;border-left-style:solid;border-left-color:rgb(16,16,255);margin-left:5px;padding-left:5px;color:rgb(0,0,0);font-weight:normal;font-style:normal;text-decoration:none;font-family:Helvetica,Arial,sans-serif;font-size:12pt"><div dir="ltr">Yes, but 'deep' only for (small) value objects that are stored by value.</div></blockquote><div><br></div><div>No, the semantics of a value class instance is independant of the storage, calling == on a value object always behave the same way.<br></div><div><br></div><div>Rémi<br></div><div><br></div><blockquote style="border-left-width:2px;border-left-style:solid;border-left-color:rgb(16,16,255);margin-left:5px;padding-left:5px;color:rgb(0,0,0);font-weight:normal;font-style:normal;text-decoration:none;font-family:Helvetica,Arial,sans-serif;font-size:12pt"><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Feb 27, 2024 at 12:09 PM Archie Cobbs <<a href="mailto:archie.cobbs@gmail.com" target="_blank">archie.cobbs@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr">On Tue, Feb 27, 2024 at 10:48 AM John Bossons <<a href="mailto:jbossons@gmail.com" target="_blank">jbossons@gmail.com</a>> wrote:</div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div dir="ltr">Where the set of field values stored for a value object field contains a field that is in turn a value object, this recursive definition would imply a recursive application of == to the set of field values stored for that object, would it not? Which sounds awfully close to a deep equals test for value object fields (but not identity fields).</div></blockquote><br>That's a good point... so a simple (for Java developers) way to explain the behavior might be: "Deep equals" for value objects and "== equals" for non-value objects.</div><div class="gmail_quote"><br></div><div class="gmail_quote">-Archie<br clear="all"></div><br><span class="gmail_signature_prefix">-- </span><br><div dir="ltr" class="gmail_signature">Archie L. Cobbs<br></div></div>
</blockquote></div><br clear="all"><br><span class="gmail_signature_prefix">-- </span><br><div dir="ltr" class="gmail_signature"><div dir="ltr">Phone:  (416) 450-3584 (cell)</div></div><br></blockquote></div></div></div></blockquote></div><br clear="all"><div><br></div><span class="gmail_signature_prefix">-- </span><br><div dir="ltr" class="gmail_signature"><div dir="ltr">Phone:  (416) 450-3584 (cell)</div></div>