프로그래밍

자바와 닷넷 문자열 비교

Jinwookoh 2025. 3. 2. 20:11

자바(Java)와 닷넷(.NET)의 문자열 비교 방식에는 몇 가지 차이점이 있습니다. 주요 차이점과 각각의 문자열 비교 방법을 살펴보겠습니다.


1. 기본 비교 방식

🔹 Java

  • Java에서 String은 불변(Immutable) 객체입니다.
  • 문자열 비교에는 == 연산자.equals() 메서드가 사용됩니다.
String str1 = "hello";
String str2 = "hello";
String str3 = new String("hello");

System.out.println(str1 == str2);      // true (같은 String Pool 참조)
System.out.println(str1 == str3);      // false (new String()으로 생성 -> 다른 객체)
System.out.println(str1.equals(str3)); // true (내용 비교)

🔹 .NET (C#)

  • C#에서 string도 불변(Immutable) 객체입니다.
  • 문자열 비교에는 == 연산자, .Equals() 메서드, 그리고 String.Compare() 메서드가 사용됩니다.
string str1 = "hello";
string str2 = "hello";
string str3 = new string("hello".ToCharArray());

Console.WriteLine(str1 == str2);      // true (같은 문자열)
Console.WriteLine(str1 == str3);      // true (C#에서는 내용 비교)
Console.WriteLine(str1.Equals(str3)); // true (내용 비교)

C#에서는 == 연산자가 문자열 내용을 비교하지만, Java에서는 ==가 참조 비교를 수행합니다.


2. 대소문자 무시 비교

🔹 Java

String str1 = "Hello";
String str2 = "hello";

System.out.println(str1.equalsIgnoreCase(str2)); // true

🔹 .NET (C#)

string str1 = "Hello";
string str2 = "hello";

Console.WriteLine(str1.Equals(str2, StringComparison.OrdinalIgnoreCase)); // true

C#에서는 StringComparison.OrdinalIgnoreCase를 사용해야 합니다.


3. 정렬 및 사전순 비교

🔹 Java (compareTo)

String a = "apple";
String b = "banana";

System.out.println(a.compareTo(b)); // -1 (a < b)
System.out.println(b.compareTo(a)); // 1  (b > a)
System.out.println(a.compareTo("apple")); // 0 (같음)

🔹 .NET (C# Compare 메서드)

string a = "apple";
string b = "banana";

Console.WriteLine(string.Compare(a, b));  // -1 (a < b)
Console.WriteLine(string.Compare(b, a));  // 1  (b > a)
Console.WriteLine(string.Compare(a, "apple")); // 0 (같음)

Java는 compareTo(), C#은 string.Compare()를 사용합니다.


4. Null 안전성 비교

🔹 Java (Objects.equals)

String str1 = null;
String str2 = "hello";

System.out.println(Objects.equals(str1, str2)); // false
System.out.println(Objects.equals(str1, null)); // true

🔹 .NET (C# string.Equals)

string? str1 = null;
string str2 = "hello";

Console.WriteLine(string.Equals(str1, str2)); // false
Console.WriteLine(string.Equals(str1, null)); // true

Java는 Objects.equals(), C#은 string.Equals()를 사용하면 null 비교가 안전합니다.


5. 부분 문자열 비교

🔹 Java (contains, startsWith, endsWith)

String str = "hello world";

System.out.println(str.contains("hello"));  // true
System.out.println(str.startsWith("hell")); // true
System.out.println(str.endsWith("world"));  // true

🔹 .NET (C# Contains, StartsWith, EndsWith)

string str = "hello world";

Console.WriteLine(str.Contains("hello"));  // true
Console.WriteLine(str.StartsWith("hell")); // true
Console.WriteLine(str.EndsWith("world"));  // true

함수명이 동일하여 사용법이 거의 같습니다.


🔥 총정리

기능  Java  .NET (C#)
문자열 비교 (==) 참조 비교 값 비교
내용 비교 equals() Equals()
대소문자 무시 비교 equalsIgnoreCase() Equals(StringComparison.OrdinalIgnoreCase)
사전순 비교 compareTo() string.Compare()
부분 문자열 확인 contains(), startsWith(), endsWith() Contains(), StartsWith(), EndsWith()
Null 안전 비교 Objects.equals() string.Equals()

 

💡 Java는 ==가 참조를 비교하지만, C#에서는 ==가 문자열 값을 비교하는 점이 가장 큰 차이입니다.