Check if two StringBuilder objects are Equal in C#

To check if two StringBuilder objects are equal in C#, you need to understand that StringBuilder.Equals() checks for reference equality, not content equality. For content comparison, you must convert the StringBuilder objects to strings first.

Syntax

Following is the syntax for checking StringBuilder equality −

// Reference equality
bool isEqual = stringBuilder1.Equals(stringBuilder2);

// Content equality
bool isContentEqual = stringBuilder1.ToString().Equals(stringBuilder2.ToString());

Using Reference Equality

The Equals() method on StringBuilder checks if both objects reference the same instance −

using System;
using System.Text;

public class Demo {
   public static void Main(String[] args) {
      StringBuilder strBuilder1 = new StringBuilder("Tim");
      StringBuilder strBuilder2 = new StringBuilder("Tom");
      StringBuilder strBuilder3 = new StringBuilder();
      strBuilder2 = strBuilder3;
      Console.WriteLine("Is StringBuilder3 equal to StringBuilder2? = " + strBuilder3.Equals(strBuilder2));
   }
}

The output of the above code is −

Is StringBuilder3 equal to StringBuilder2? = True

Content Equality vs Reference Equality

Here's an example that demonstrates the difference between reference and content equality −

using System;
using System.Text;

public class Demo {
   public static void Main(String[] args) {
      StringBuilder strBuilder1 = new StringBuilder("Jacob");
      StringBuilder strBuilder2 = new StringBuilder("Jacob");
      
      Console.WriteLine("Reference equality: " + strBuilder1.Equals(strBuilder2));
      Console.WriteLine("Content equality: " + strBuilder1.ToString().Equals(strBuilder2.ToString()));
   }
}

The output of the above code is −

Reference equality: False
Content equality: True

Comparing StringBuilder Content

To properly compare the content of two StringBuilder objects, convert them to strings first −

using System;
using System.Text;

public class Demo {
   public static void Main(String[] args) {
      StringBuilder sb1 = new StringBuilder("Hello");
      StringBuilder sb2 = new StringBuilder("Hello");
      StringBuilder sb3 = new StringBuilder("World");
      
      Console.WriteLine("sb1 content equals sb2: " + sb1.ToString().Equals(sb2.ToString()));
      Console.WriteLine("sb1 content equals sb3: " + sb1.ToString().Equals(sb3.ToString()));
      
      // Case-insensitive comparison
      Console.WriteLine("Case-insensitive comparison: " + 
         sb1.ToString().Equals(new StringBuilder("HELLO").ToString(), StringComparison.OrdinalIgnoreCase));
   }
}

The output of the above code is −

sb1 content equals sb2: True
sb1 content equals sb3: False
Case-insensitive comparison: True

Comparison Methods

Method What It Compares Use Case
sb1.Equals(sb2) Reference equality Check if same object instance
sb1.ToString().Equals(sb2.ToString()) Content equality (case-sensitive) Compare actual text content
string.Compare(sb1.ToString(), sb2.ToString()) Lexicographical comparison Sorting or ordering

Conclusion

StringBuilder.Equals() checks reference equality, not content equality. To compare the actual text content of two StringBuilder objects, convert them to strings using ToString() first. This distinction is crucial for proper StringBuilder comparison in C#.

Updated on: 2026-03-17T07:04:36+05:30

201 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements