일반적으로 인스턴스를 생성할 때는 이렇게 생성자를 통해서 만든다.
char data[] = {'a', 'b', 'c'};
String myString = new String(data);
abc
하지만 문자열의 경우에는 '문자열 리터럴(String Literal)'로 만들기 때문에 기본형이 아닌가 오해를 할 수도 있다.
String myString = "abc";
어쨌든 문자열도 클래스 기반의 자료형이기 때문에 여러 가지 메소드를 사용할 수 있다.
유용해보이는 몇 가지만 살펴보자!
대소문자 변환
toUpperCase 메소드를 이용하면 모든 글자를 대문자로, toLowerCase 메소드를 이용하면 모두 소문자로 변환할 수 있다.
String myString = "aBc";
System.out.println(myString.toUpperCase()) // 모두 대문자로
System.out.println(myString.toLowerCase()) // 모두 소문자로
System.out.println(myString) // 그대로
ABC
abc
aBc
참고로 이 두 메소드는 myString 자체를 바꾸는 것이 아니라, 새로운 문자열을 리턴시켜주는 것이다. 따라서 마지막에 System.out.println(myString)을 하면 원래대로 "aBc"가 나온다.
문자열 비교
String myString = "aBc";
System.out.println(myString.toLowerCase() == "abc");
false
양쪽 다 "abc"이니까 true가 나올 것 같은데, 실행하면 false가 나온다.
기본형의 비교 연산자는 양쪽의 값이 같으면 true가 나오는데, 참조형의 비교 연산자는 가리키는 인스턴스가 같은 인스턴스인지 확인하는 역할을 한다. 위의 예시에서 두 인스턴스가 서로 다른 인스턴스이기 때문에 false가 나온다.
만약 두 문자열의 내용이 같은지 비교하려면 ==가 아니라 equals 메소드를 사용해야한다.
String myString = "aBc";
System.out.println(myString.toLowerCase().equals("abc"));
true
예전에 'DNA 염기 서열' 문제에서는 equals를 쓰지 않고 switch문에 넣었는데, 이건 왜 제대로 작동했을까? switch문 내부에서 == 대신 equals 메소드를 쓰고 있었기 때문이다.
'TIL > Java' 카테고리의 다른 글
[Java] Wrapper Class / Array List (0) | 2022.01.10 |
---|---|
[Java] 숫자 도구(Math, Random) (0) | 2022.01.10 |
[Java] 단위 변환기 (0) | 2022.01.08 |
[Java] 인스턴스 메소드 vs 클래스 메소드 (0) | 2022.01.07 |
[Java] 인스턴스 변수 vs 클래스 변수 (0) | 2022.01.07 |