Article Categories
- All Categories
-
Data Structure
-
Networking
-
RDBMS
-
Operating System
-
Java
-
MS Excel
-
iOS
-
HTML
-
CSS
-
Android
-
Python
-
C Programming
-
C++
-
C#
-
MongoDB
-
MySQL
-
Javascript
-
PHP
-
Economics & Finance
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#.
