[java] String 클래스

Seongho·2023년 4월 18일
0

java

목록 보기
7/10

immutable(변경 불가능한) 클래스

String 클래스는 참조 자료형이다. 객체를 한번 생성하면 변경할 수 없다.

String a = "a";
String b = "b;
a = a + b;


따라서, + 연산자를 이용하여 문자열을 결합하면 인스턴스가 하나 더 생긴다.
위 그림을 보면 알 수 있듯이, String은 참조 자료형이므로, String 인스턴스의 시작주소를 값으로 갖는다.
a에 a + b를 넣으면 원래 a의 인스턴스에 값이 ab로 바뀌는 것이 아니라, ab를 담는 인스턴스가 새로 생성되고
String 객체는 그 인스턴스의 시작주소를 값으로 갖는다.

문자열의 비교


자바에서 문자열을 생성하는 방법으로 두 가지가 있는데, 문자열 리터럴을 지정하는 방법과 새로운 인스턴스를 생성하는 방법이 있다. 문자열 리터럴은 힙 내부에 String constant pool에 저장되고, value가 같으면 해당 영역을 재사용한다. 어차피 String은 변경불가능하기 때문에 한 주소를 여러 객체가 참조해도 상관없다. 생성자를 사용해서 인스턴스를 생성한 경우는 힙 영역에 인스턴스가 생성된다. 따라서, 생성자를 이용해 String 인스턴스를 계속 만들어내는 것은 좋지 않다.

String str1 = "abc";				//문자열 리터럴 "abc"의 주소 저장
String str2 = "abc";				//문자열 리터럴 "abc"의 주소 저장
String str3 = new String("abc");	//String 인스턴스의 주소 저장 
String str4 = new String("abc");	//String 인스턴스의 주소 저장 


str1 == str2가 true인 이유는 두 객체는 문자열 리터럴을 참조하기 때문에 같은 주소를 참조하여 값이 같기 때문이다. str3 == str4가 false인 이유는 두 객체가 각각 다른 인스턴스를 생성하고 그 주소를 참조하여 값이 다르기 때문이다.

equals()

생성자를 통해 생성된 인스턴스를 참고하는 문자열의 값 비교는 equals()를 사용해야 한다.

String str3 = new String("abc");	//String 인스턴스의 주소 저장 
String str4 = new String("abc");	//String 인스턴스의 주소 저장 
System.out.println(str3.equals(str4));		//true 출력

문자열 슬라이싱

  • SubString
  • Split

SubString

public String substring (int startIndex, int endIndex) //endIndex는 불포함

String str = "abcdef";
str.substring(2, 4);			//cd

Split (특정 문자 기준으로 자를 때)

public String split (String regex)
public String split (String regex, int limit)
//limit개만 구분하고 나머지는 놔둠

String str = "i am a human";
String[] strArr = str.split("\\s");	  	//공백기준 슬라이싱 
										//str[0] = i / str[1] = am / str[2] = a / str[3] = human
String str = "a.b.c";
String strA = str.split("[.]")[0]		//.기준으로 자른 첫번째 String 

참고로, 정규식에서 어떤 문자 기준으로 자르고싶을 때는 [ ]안에 넣어야 한다.
예를 들어, abccbaa를 b를 기준으로 자르고싶으면 split("[b]")

문자열 <-> Int

  • String to Int : Integer.parseInt()
String str = "123";
int num = Integer.parseInt(str);
  • Int to String : Integer.toString()
int num = 123;
String str = Integer.toString(num);

Character <-> 문자열

  • Character to String : Character.toString()
Character c = 'a';
String str = Character.toString(c);		//"a"
  • String to Character : String.charAt()
String str = "abc";
Character c = str.charAt(1);		//'b'

Character이 숫자인지 확인

Character.isDigit(char c)

Character c = '91';
Character.isDigit(c);			//true
profile
Record What I Learned

0개의 댓글