Hey Vitaly and Jonathan,

> As mentioned offline, I would move the null check right before "return this".

@Vitaly: Thanks again. Adjusted. 
@Jonathan: Thanks. Thought about that as well, but I'd probably rather go with 
explaining the explicit nullcheck.

See the adjusted patch below. What do you think?

===== PATCH ======
diff --git a/src/java.base/share/classes/java/lang/String.java 
b/src/java.base/share/classes/java/lang/String.java
--- a/src/java.base/share/classes/java/lang/String.java
+++ b/src/java.base/share/classes/java/lang/String.java
@@ -2177,11 +2177,13 @@
      */
     public String replace(CharSequence target, CharSequence replacement) {
         String tgtStr = target.toString();
-        String replStr = replacement.toString();
         int j = indexOf(tgtStr);
         if (j < 0) {
+            // Explicit nullcheck of replacement to fulfill NPE contract in 
early out
+            Objects.requireNonNull(replacement);
             return this;
         }
+        String replStr = replacement.toString();
         int tgtLen = tgtStr.length();
         int tgtLen1 = Math.max(tgtLen, 1);
         int thisLen = length();

Reply via email to