반응형
이전 포스팅에서 String 문자열에 대해 합치는것에 대한 포스팅을 다룬적이 있다.
자세한 내용은 아래 참고 포스팅을 참고 바란다.
Java - String
- java에서 String은 Immutable하고(값을 한번 정하고 나면 수정할 수 없고), primitive type이 아니다.
- 배정할 값이 없다면, null이 된다.
Immutable
- java에서 String은 Immutabl한다. 즉 한번 값을 지정했다면 그 값의 내부 원소를 수정할 수는 없다.
- 물론, 아래처럼 변수에 들어 있는 값을 통째로 바꾸어주는 것이 가능하기는 한데, 엄밀히 따지면 이는 값을 수정했다기 보다, 원래 있던 값을 폐기하고 새로운 값을 지정한 것이다.
String s1 = "abc";
s1 = "def";
Initialize
- String을 초기화하는 방법은 다음 두 가지가 있다.
String s1 = "abc";
String s1 = new String("abc");
Return number of Character in String
- String의 길이는 .length() 메소드를 사용해서 가져올 수 있다.
String s = "abc";
s.length() // 3
Return char by its index
- .charAt() 메소드를 이용해서 String의 문자에 각각 접근할 수 있다.
String s = "abc";
s.charAt(0) //'a'
s.charAt(1) //'b'
Other Useful methods
- .isEmpty(): 해당 String이 비어있으면(""), true를 리턴.
- .isBlank(): 해당 String이 비어있거나 공백(whitespace)만 있으면 true를 리턴.
- .toUpperCase(), .tolowerCase(): String을 대문자, 소문자로 변환.
- .startsWith(prefix), .endsWith(suffix): String이 prefix로 시작하는지, suffix로 끝나는지를 확인하여 true, fale를 리턴.
- .contains(): String에 특정 string이 포함되어 있는지를 확인하여 true, false 를 리턴.
- .substring(beginIndex, endIndex): String의 substring를 리턴.
- .trim(): 앞뒤 공백(whitespace, tab, newline)을 삭제하고 리턴.
- .replace(oldStr, newStr): String에 존재하는 oldStr을 모두 newStr로 변환하고 리턴.
Concatenate
- String은 + 연산으로 두 String을 연결할 수도 있고, .concat를 이용해서 연결할 수도 있다.
String s1 = "abc";
String s2 = "def";
System.out.println(s1 + s2);
System.out.println(s1.concat(s2)); - 다만, String과 다른 변수 타입, 가령 int, Boolean을 사용할 경우에도 아래처럼 알아서 String이 아닌 변수를 String으로 변환하여 String과 연결해준다.
String s1 = "abc";
int a = 10;
Boolean tf = true;
s1 + a + tf // abc10true
Equality Check
- java에서 String은 Interning을 통해서 관리된다. 즉, 새롭게 String을 만들었는데, 이 값이 이미 다른 변수에서 가지고 있는 값이라면, 그 값을 가르키도록 한다.
- 따라서, 아래와 같은 코드에서 s1과 s2는 같은 메모리 공간을 가리다. 그리고 java에서 String은 Interning을 하기 때문에, 같은 값이면 같은 메모리 공간을 가지게 된다.
- 여기서, String은 object type이므로 ==나, != 연산으로 비교하게 되면 값을 비교하는 것이 아니라, 메모리 주소를 비교하게 된다. 하지만, 앞서 말한 것처럼 String은 interning되어 관리되기 때문에, 그냥 주소를 비교해도 결과가 동일하게 나온다.
String s1 = "abc";
String s2 = "abc";
s1 == s2 // true
- 다만, 이는 s1 = "abc"과 같이 String Literal로 표현했을때이고, 아래와 같은 경우에는 false가 나오게 된다.
- new String("abc")로 새로운 String을 만든 경우에는 interning이 되지 않는다.
- 따라서, 이런 경우에는 .equals() 메소드를 사용해서 값을 비교해준다.
String s1 = "abc";
String s2 = new String("abc");
System.out.println(s1 == s2); // false
System.out.println(s1.equals(s2)); // true
참고 포스팅
https://thenicesj.tistory.com/546
반응형
'IT > Java' 카테고리의 다른 글
module project란? (30) | 2023.05.01 |
---|---|
try catch와 throws, throw의 차이 (19) | 2023.04.30 |
문자열 합치기 방법(concat, StringBuilder, StringBuffer, + ) (23.04.26) (8) | 2023.04.28 |
SQL Builder 클래스 (36) | 2023.04.23 |
application.yml / .properties 값 가져오기 (@Value) (20) | 2023.04.21 |
댓글