Equality for values -- new analysis, same conclusion

Dan Smith daniel.smith at oracle.com
Mon Aug 12 18:40:56 UTC 2019


> On Aug 12, 2019, at 12:34 PM, Brian Goetz <brian.goetz at oracle.com> wrote:
> 
> I believe much of the "is this legal" ground here has been covered by previous attempts to intrinsify various methods (though this would probably the first time we apply this reasoning to user-overridable methods.)  Essentially, this would be using invariants of the specification to enable certain transformations.  Specifically, the specification 
> 
>     https://docs.oracle.com/en/java/javase/12/docs/api/java.base/java/lang/Object.html#equals(java.lang.Object) <https://docs.oracle.com/en/java/javase/12/docs/api/java.base/java/lang/Object.html#equals(java.lang.Object)>
> 
> clearly says that for a non-null reference x, x.equals(x) must be true.  Can we use that to optimize `x==y || x.equals(y)`?  I can see the arguments on both sides.  

"I didn't get the boolean value I expected because my 'equals' method doesn't follow the specified contract" is one thing. What I'm more concerned with is "I'm getting an exception from a method that I never called, but only when -XXfoobar is turned on".


More information about the valhalla-spec-observers mailing list