diff --git a/framework-docs/modules/ROOT/pages/core/expressions/language-ref/operator-elvis.adoc b/framework-docs/modules/ROOT/pages/core/expressions/language-ref/operator-elvis.adoc
index 8f7e69a0b6..3884dcadf2 100644
--- a/framework-docs/modules/ROOT/pages/core/expressions/language-ref/operator-elvis.adoc
+++ b/framework-docs/modules/ROOT/pages/core/expressions/language-ref/operator-elvis.adoc
@@ -38,6 +38,10 @@ Kotlin::
----
======
+NOTE: The SpEL Elvis operator also checks for _empty_ Strings in addition to `null` objects.
+The original snippet is thus only close to emulating the semantics of the operator (it would need an
+additional `!name.isEmpty()` check).
+
The following listing shows a more complex example:
[tabs]
@@ -53,7 +57,7 @@ Java::
String name = parser.parseExpression("name?:'Elvis Presley'").getValue(context, tesla, String.class);
System.out.println(name); // Nikola Tesla
- tesla.setName(null);
+ tesla.setName("");
name = parser.parseExpression("name?:'Elvis Presley'").getValue(context, tesla, String.class);
System.out.println(name); // Elvis Presley
----
@@ -69,7 +73,7 @@ Kotlin::
var name = parser.parseExpression("name?:'Elvis Presley'").getValue(context, tesla, String::class.java)
println(name) // Nikola Tesla
- tesla.setName(null)
+ tesla.setName("")
name = parser.parseExpression("name?:'Elvis Presley'").getValue(context, tesla, String::class.java)
println(name) // Elvis Presley
----
diff --git a/spring-expression/src/main/java/org/springframework/expression/spel/ast/Elvis.java b/spring-expression/src/main/java/org/springframework/expression/spel/ast/Elvis.java
index 55e2267c4c..5cbc2b594c 100644
--- a/spring-expression/src/main/java/org/springframework/expression/spel/ast/Elvis.java
+++ b/spring-expression/src/main/java/org/springframework/expression/spel/ast/Elvis.java
@@ -26,9 +26,9 @@ import org.springframework.util.Assert;
import org.springframework.util.ObjectUtils;
/**
- * Represents the elvis operator ?:. For an expression a?:b if a is not null,
- * the value of the expression is a, if a is null then the value of the expression is
- * b.
+ * Represents the Elvis operator ?:. For an expression a?:b if a is neither null
+ * nor an empty String, the value of the expression is a.
+ * If a is null or the empty String, then the value of the expression is b.
*
* @author Andy Clement
* @author Juergen Hoeller
@@ -43,8 +43,8 @@ public class Elvis extends SpelNodeImpl {
/**
- * Evaluate the condition and if not null, return it.
- * If it is null, return the other value.
+ * Evaluate the condition and if neither null nor an empty String, return it.
+ * If it is null or an empty String, return the other value.
* @param state the expression state
* @throws EvaluationException if the condition does not evaluate correctly
* to a boolean or there is a problem executing the chosen alternative