From 056ad3bd64ae682e5a770965b640c7256cc5d627 Mon Sep 17 00:00:00 2001 From: Anish | AxC <225038896+ax1nch@users.noreply.github.com> Date: Mon, 20 Apr 2026 18:53:25 +0200 Subject: [PATCH] Performance: Short-circuit check based on pre-derived candidate Double Numeric identity pre-check for the heap-allocating f.toString().equals(d.toString()) --- src/main/java/org/apache/commons/lang3/math/NumberUtils.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/apache/commons/lang3/math/NumberUtils.java b/src/main/java/org/apache/commons/lang3/math/NumberUtils.java index 7327fac06b3..293139b4494 100644 --- a/src/main/java/org/apache/commons/lang3/math/NumberUtils.java +++ b/src/main/java/org/apache/commons/lang3/math/NumberUtils.java @@ -494,7 +494,8 @@ public static Number createNumber(final String str) { try { final Float f = createFloat(str); final Double d = createDouble(str); - if (!f.isInfinite() && !(f.floatValue() == 0.0F && !isZero(mant, dec)) && f.toString().equals(d.toString())) { + if (!f.isInfinite() && !(f.floatValue() == 0.0F && !isZero(mant, dec)) + && ((double) d.floatValue() == d.doubleValue() || f.toString().equals(d.toString()))) { return f; } if (!d.isInfinite() && !(d.doubleValue() == 0.0D && !isZero(mant, dec))) {