Double equals

40 views
Skip to first unread message

blackh...@gmail.com

unread,
Mar 25, 2021, 4:38:28 AM3/25/21
to GWT Users
Can someone help me with the double.equals
with the following simple code:
      Double value1 = Double.NaN;
      Double value2 = Double.NaN;

      boolean result1 = value1.equals(value2);

In Java result1 = true;
In web with GWt result1 = false;

Looking at the sourcecode i see that the java double has the following equals method:
public boolean equals(Object obj) { 
return (obj instanceof Double) && (doubleToLongBits(((Double)obj).value) == doubleToLongBits(value));
}

the GWT double source code shows the following:
@Override
public boolean equals(Object o) {
return checkNotNull(this) == o;
}

I do not really understand the GWT version. th emost important thing is that the equals has different results between java and GWT.
How to resolve this?

Regards,

Jasper

Jens

unread,
Mar 25, 2021, 5:15:57 AM3/25/21
to GWT Users
In GWT Boolean, Double and String are represented using their unboxed primitive types.

See for Double:

So when compiled to JavaScript Double.equals() would be called with primitive types and that's why it can generally do an instance equality check. However Double.NaN is represented using JavaScript NaN (see: https://github.com/gwtproject/gwt/blob/master/user/super/com/google/gwt/emul/java/lang/Double.java#L35 ) and in JavaScript NaN == NaN is always false. 

So I would consider it an emulation bug and equals() needs to check for NaN and handle it correctly with regard to Java behavior. Feel free to create a bug for it on GitHub.

-- J.
Reply all
Reply to author
Forward
0 new messages