diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 32a259509..d3f5b6e47 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -56,6 +56,8 @@ The <action> type attribute can be add,update,fix,remove.
     <action                   type="fix" dev="ggregory" due-to="hduelme">Improve performance of StringUtils.isMixedCase() #1096.</action>
     <action issue="LANG-1706" type="fix" dev="ggregory" due-to="Alberto Fernández">ThreadUtils find methods should not return null items #1098.</action>
     <action issue="LANG-1710" type="fix" dev="ggregory" due-to="Shashank Sharma, Gary Gregory, Oksana">ReflectionToStringBuilder changes in version 3.13.0 has broken the logic for overriding classes.</action>
+    <action                   type="fix" dev="ggregory" due-to="Gary Gregory">Return "null"" instead of NPE in ClassLoaderUtils.toString(ClassLoader).</action>
+    <action                   type="fix" dev="ggregory" due-to="Gary Gregory">Return "null"" instead of NPE in ClassLoaderUtils.toString(URLClassLoader).</action>
     <!-- ADD -->
     <action                   type="add" dev="ggregory" due-to="Rob Spoor, Gary Gregory">Add Functions#function(Function).</action>
     <action                   type="add" dev="ggregory" due-to="Rob Spoor, Gary Gregory">Add FailableFunction#function(FailableFunction).</action>
diff --git a/src/main/java/org/apache/commons/lang3/ClassLoaderUtils.java b/src/main/java/org/apache/commons/lang3/ClassLoaderUtils.java
index dda4828a2..a7cff3693 100644
--- a/src/main/java/org/apache/commons/lang3/ClassLoaderUtils.java
+++ b/src/main/java/org/apache/commons/lang3/ClassLoaderUtils.java
@@ -20,6 +20,7 @@
 import java.net.URL;
 import java.net.URLClassLoader;
 import java.util.Arrays;
+import java.util.Objects;
 
 /**
  * Helps work with {@link ClassLoader}.
@@ -64,7 +65,7 @@ public static String toString(final ClassLoader classLoader) {
         if (classLoader instanceof URLClassLoader) {
             return toString((URLClassLoader) classLoader);
         }
-        return classLoader.toString();
+        return Objects.toString(classLoader);
     }
 
     /**
@@ -74,6 +75,6 @@ public static String toString(final ClassLoader classLoader) {
      * @return the formatted string.
      */
     public static String toString(final URLClassLoader classLoader) {
-        return classLoader + Arrays.toString(classLoader.getURLs());
+        return classLoader != null ? classLoader + Arrays.toString(classLoader.getURLs()) : "null";
     }
 }
diff --git a/src/test/java/org/apache/commons/lang3/ClassLoaderUtilsTest.java b/src/test/java/org/apache/commons/lang3/ClassLoaderUtilsTest.java
index b51ed3635..157745ec2 100644
--- a/src/test/java/org/apache/commons/lang3/ClassLoaderUtilsTest.java
+++ b/src/test/java/org/apache/commons/lang3/ClassLoaderUtilsTest.java
@@ -17,6 +17,7 @@
 
 package org.apache.commons.lang3;
 
+import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 import java.io.IOException;
@@ -51,6 +52,7 @@ public void testToString_ClassLoader() throws IOException {
             final ClassLoader classLoader = urlClassLoader;
             Assertions.assertEquals(String.format("%s[%s]", classLoader, url), ClassLoaderUtils.toString(classLoader));
         }
+        assertEquals("null", ClassLoaderUtils.toString((ClassLoader) null));
     }
 
     @Test
@@ -59,5 +61,6 @@ public void testToString_URLClassLoader() throws IOException {
         try (URLClassLoader urlClassLoader = new URLClassLoader(new URL[] { url })) {
             Assertions.assertEquals(String.format("%s[%s]", urlClassLoader, url), ClassLoaderUtils.toString(urlClassLoader));
         }
+        assertEquals("null", ClassLoaderUtils.toString((URLClassLoader) null));
     }
 }