Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why is the result of adding two null strings not null? [duplicate]

Tags:

string

c#

null

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).

like image 270
spetzz Avatar asked Feb 14 '14 11:02

spetzz


People also ask

What happens if you add null to a string?

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.

What is the result when two null strings are concatenated?

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.

Can we add NULL to string in Java?

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" .

Can we compare Null with string?

We can simply compare the string with Null using == relational operator. Print true if the above condition is true. Else print false.


1 Answers

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.

like image 195
dcastro Avatar answered Sep 28 '22 00:09

dcastro