@@ -686,15 +686,32 @@ else if (left instanceof Long) {
686686 };
687687
688688 public static final Lambda2 <Object , Object , Object > PRIMITIVE_EQUAL = new Lambda2 <Object , Object , Object >() {
689- public Object value (Object left , Object right ) { return left .equals (right ); }
689+ public Object value (Object left , Object right ) {
690+ // we have special cases for float and double so
691+ // that 0.0==-0.0 and Double.NaN==Double.NaN get
692+ // treated correctly
693+ if ((left instanceof Float ) && (right instanceof Float )) {
694+ float l = ((Float )left ).floatValue ();
695+ float r = ((Float )right ).floatValue ();
696+ return l ==r ;
697+ }
698+ else if ((left instanceof Double ) && (right instanceof Double )) {
699+ double l = ((Double )left ).doubleValue ();
700+ double r = ((Double )right ).doubleValue ();
701+ return l ==r ;
702+ }
703+ else return left .equals (right );
704+ }
690705 };
691706
692707 public static final Lambda2 <Object , Object , Object > OBJECT_NOT_EQUAL = new Lambda2 <Object , Object , Object >() {
693708 public Object value (Object left , Object right ) { return left != right ; }
694709 };
695710
696711 public static final Lambda2 <Object , Object , Object > PRIMITIVE_NOT_EQUAL = new Lambda2 <Object , Object , Object >() {
697- public Object value (Object left , Object right ) { return !left .equals (right ); }
712+ public Object value (Object left , Object right ) {
713+ return !((Boolean )PRIMITIVE_EQUAL .value (left , right ));
714+ }
698715 };
699716
700717 public static final Lambda2 <Object , Object , Object > CONCATENATE = new Lambda2 <Object , Object , Object >() {
0 commit comments