본문 바로가기
ETC/Study

[Java] char배열과 String 클래스 차이

by Youngs_ 2022. 6. 9.

지금까지 여러 문자, 즉 문자열을 저장할 때 String타입의 변수를 사용했다. 사실 문자열이라는 용어는 '문자를 연이어 늘어놓은 것'을 의미하므로 문자배열인 char배열과 같은 뜻이다.

자바에서는 char배열이 아닌 String클래스를 이용해서 문자열을 처리하는 이유는 무엇일까?

String클래스는 char배열에 기능(메서드)을 추가한 것이다.

char배열과 String클래스의 한 가지 중요한 차이가 있는데, String객체(문자열)는 읽을수만 있을 뿐 내용을 변경할 수 없다는 것이다. 

public class Test {
    public static void main(String[] args) {
        String str = "Java"; 
        str = str + "8";
        System.out.println(str);    // Java8
    }
}
 

위처럼 String값이 바뀌는 것 같지만 새로운 문자열이 생겨 str이 새로운 주소값을 가르키는 것이다.

 

 

그리고 String문자열에서 하나의 문자만 꺼내오고 싶을 때 charAt이라는 메소드를 사용한다. 

다시말하면, charAt메소드는 문자열에서 지정된 index에 있는 한 문자를 가져온다.

배열에서 "배열이름[index]"로 index에 위치한 값을 가져오는 것과 같다고 생각하면 된다. 

 
public class Test {
    public static void main(String[] args) {
        String str = "Hello";
        char ch = str.charAt(1);  // e
    }
}

 

char배열과 String클래스의 변환 

public class Test {
    public static void main(String[] args) {
        char[] chArr = {'A', 'B', 'C'};
        String str = new String(chArr);   // char배열 -> String
        char[] tmp = str.toCharArray();   // String -> char배열 
    }
}
 

 


차이점은 크게 2가지로 글자수의 제한과 내용물의 차이입니다.

char 같은 경우는 내용물이 1개의 문자로 제한되는 반면에 String은 그런 제한이 없이 문자를 담을 수 있습니다.

내용물의 차이는 char는 해당 변수 안에 값을 직접적으로 가지고 있고 해당 값이 있는 좌표를 가지고 있지 않습니다.

String은 char와 달리 클래스타입의 변수이기에 생성 시 해당 변수 안의 값을 가지는 게 아니라 임의로 만들어진 값이 들어있는 위치의 좌표를 내용물로 가집니다.

char a= 'a' 면 a라는 변수 안에는 a라는 값이 있지만 

String abc='abc'는 abc라는 변수 안에는 'abc'가 아니라 'abc'라는 텍스트가 위치한 좌표 "xxxxxxx(임의)' 를 가집니다.

이 차이점에서 발생하는 것이 ==의 사용가능 여부입니다. char 같은 경우는 값이 같다면 ==를 사용할 수 있지만 String은 내용이 같더라도 String 생성시마다 서로 다른 좌표가 생성되기에 ==를 사용하면 같지 않다는 결과가 나옵니다. 이를 위한 해결책으로 .equals() 를 이용하여 스트링의 내용물이 실제 같은지를 확인하여 같은 지 여부를 파악합니다.


출처 : https://devlog-wjdrbs96.tistory.com/135

 

[Java] char배열과 String 클래스의 차이는?

지금까지 여러 문자, 즉 문자열을 저장할 때 String타입의 변수를 사용했다. 사실 문자열이라는 용어는 '문자를 연이어 늘어놓은 것'을 의미하므로 문자배열인 char배열과 같은 뜻이다. 자바에서는

devlog-wjdrbs96.tistory.com

https://www.inflearn.com/questions/14448

 

'ETC > Study' 카테고리의 다른 글

[Android] Intent란?  (0) 2022.07.08
[자료구조] List와 Map의 차이점  (0) 2022.06.15
[Java] HashMap, TreeMap, LinkedHashMap의 차이점  (0) 2022.06.15
세마포어와 뮤텍스의 차이  (0) 2021.07.13
[DB] Outer Join, Inner Join 차이점  (0) 2021.05.28

댓글