I was fiddling around in C# when I came across this weird behavior in .Net programming.
I have written this code:
static void Main(string[] args) { string xyz = null; xyz += xyz; TestNullFunc(xyz); Console.WriteLine(xyz); Console.Read(); } static void TestNullFunc(string abc) { if (abc == null) { Console.WriteLine("meow THERE ! "); } else { Console.WriteLine("No Meow "); } }
I got the output as No meow
, which means the string is not null
. How is this possible? Why does adding two null
strings, result in a non-null
string?
On debugging when I check the value of xyz
after adding it to itself, its value is ""
(no characters).
If the input object is null, it returns an empty (“”) String, otherwise, it returns the same String: return value == null ? "" : value; However, as we know, String objects are immutable in Java.
The result is a reference to a String object (newly created, unless the expression is a compile-time constant expression (§15.28))that is the concatenation of the two operand strings.
The concat() method only accepts a String object as an argument, while the + operator will accept anything. If an object is passed to the + operator, it gets converted to a string by the toString() method of that object. If a null reference variable is passed to the + operator, it gets converted to string "null" .
We can simply compare the string with Null using == relational operator. Print true if the above condition is true. Else print false.
From MSDN:
In string concatenation operations, the C# compiler treats a null string the same as an empty string,
Even though xyz
is null, calling the += operator (which is converted to a call to the + operator (*)) on it does not throw a NullReferenceException
because it's a static method. In pseudo code:
xyz = String.+(null, null);
The implementation will then interpret this as if it was
xyz = String.+("", "");
(*) Section §7.17.2 of the C# specification:
An operation of the form x op= y is processed by applying binary operator overload resolution (§7.3.4) as if the operation was written x op y.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With