본문 바로가기
Programming/Java

문자열 클래스

by Tarake 2024. 8. 3.

문자열(String)


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

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

String str1 = new String("Hello");
String str2 = new String("Hello");

System.out.println(str1 == str2); // false

자바에서 문자열을 만드는 방법에는 두 가지가 있습니다.

  • 리터럴 방식("")
  • new String("")

두 가지 방법의 차이점


그림을 보면 위 코드에서 == 을 했을 때 리터럴은 true가 되고 new String은 false가 나오는지 알 수 있습니다.

== 연산은 문자열을 비교하는 것이 아닌 문자열의 참조값을 비교하여 true/false 값을 반환하기 때문에 이러한 결과가 나오는 것입니다. 그래서 0x1234는 0x4567은 다르기 때문에 ==에서 false가 나온 것이고 리터럴은 0x8912 끼리 비교하기 때문에 true가 반환된 것입니다.

 

 

이러한 차이가 나는 것은 리터럴 방식의 경우 자바에서 처음에 "Hello"를 메모리에 저장한 뒤 참조값을 str1 변수에 저장합니다. 그러고 다음 str2에서 "hello"를 초기화하려고하면 새로운 메모리에 만드는 것이 아닌 기존에 만들어둔 Hello의 참조값을 str2에 저장합니다. 하지만 new String은 매번 새로운 메모리를 할당하여 저장하기 때문에 == 연산이 다르게 나오는 것입니다. 따라서 new String의 값을 비교하고 싶으면 equals 메소드를 사용해야합니다.

String str1 = new String("hello");
String str2 = new String("hello");

if(str1.equals(str2))	// true

 

 

String 클래스의 주요 메소드


메소드 이름 기능
length() 문자열의 길이를 반환합니다.
charAt() 지정된 인덱스에 있는 문자를 반환합니다.
subString() 지정된 시작 인덱스부터 끝까지의 부분 문자열을 반환합니다.
contains() 문자열이 특정 시퀀스를 포함하고 있는지 여부를 반환합니다.
startsWith() 문자열이 지정된 접두사로 시작하는지 여부를 반환합니다.
endsWith() 문자열이 지정된 접미사로 끝나는지 여부를 반환합니다.
indexOf() 지정된 문자가 처음 나타나는 위치의 인덱스를 반환합니다. 없으면 -1을 반환합니다.
lastIndexOf() 지정된 문자가 마지막으로 나타나는 위치의 인덱스를 반환합니다.
equals() 문자열이 다른 객체와 같은지를 비교합니다.
equalsIgnoreCase() 대소문자를 무시하고 두 문자열을 비교합니다.
compareTo() 두 문자열을 사전적으로 비교합니다.
toLowerCase() 모든 문자를 소문자로 변환한 새 문자열을 반환합니다.
toUpperCase() 모든 문자를 대문자로 변환한 새 문자열을 반환합니다.
trim() 문자열의 앞뒤 공백을 제거한 새 문자열을 반환합니다.
split() 지정된 기준으로 문자열을 분리하고, 결과를 문자열 배열로 반환합니다.
replace(char oldChar, char newChar) 문자열에서 모든 oldChar를 newChar로 대체한 새 문자열을 반환합니다

 

 

 

 

출처

W3school

 

W3Schools.com

W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.

www.w3schools.com

 

'Programming > Java' 카테고리의 다른 글

상속  (0) 2024.08.06
배열  (0) 2024.08.05
메소드 오버로딩(Method overloading)  (0) 2024.08.03
정보 은닉과 캡슐화  (1) 2024.08.02
클래스와 생성자  (0) 2024.08.02