일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 야학
- 데이터베이스 개론
- LeNet
- 데이터베이서
- reshape
- tensorflow
- 카카오클라우드스쿨2기
- CNN
- 머신러닝(딥러닝)
- Python
- 개발자
- 생활코딩 데이터베이스
- 판다스
- 연산자
- 생활코딩 머신러닝야학
- JavaScript
- 데이터베이스
- 이것이 자바다
- Database
- 생활코딩
- 머신러닝
- flatten
- 파이썬
- 머신러닝야학
- MySQL
- pandas
- 딥러닝
- Java
- Today
- Total
IT's 우
[Java] String vs Char 차이 본문
backtony 씨의 답안
📌
Char은 내용물이 1개인 문자로 제한되는 반면에 String은 문자열을 담을 수 있다.
Char의 경우 변수 안에 직접적으로 문자를 가지고 있지만
String은 reference 타입으로 실질적인 문자열이 아니라 주소값을 가지고 있다.
이 때문에 비교 방식에 차이가 있다.
Char의 경우 값이 같다면 ==(동일성) 비교를 사용할 수 있지만,
String의 경우 내용이 같더라도 생성되는 주소가 다르기 때문에 == 비교를 사용하면 다른 결과가 나오게 되고 equals를 사용해야 한다.
기본 타입(primitive type)

- 데이터의 실제 값을 의미
- 정수 타입, 실수 타입, 문자 타입, 논리 타입으로 분류
문자 타입 : char
- char은 Character의 약자
- 단 하나의 문자만 저장
- 2Byte
- char 타입의 리터럴은 작은따옴표(’ ‘)로 감싸서 표현
- 컴퓨터 내부에 저장될 땐 정수로 치환(아스키코드)
기본형 타입에서 문자 타입으로 분리되었지만, 사실상 2 바이트의 정수다.
→ 실제로 컴퓨터는 문자를 구별할 수 없다. 즉, 컴퓨터 안에는 절대 문자가 저장될 수 없을뿐더러, 모든 것이 숫자로 저장되는 것이다.
사람과 컴퓨터 언어를 교환하기 위해서 만들어진 코드(대표적 아스키코드와 유니코드)가 있다.
char형 변수의 문자를 선언하게 되면, 해당 문자는 아스키코드의 규칙에 맞게 숫자로 치환이 되어 컴퓨터에 저장된다.
📌아스키코드(ASCII code)
- 미국 표준 부호 체계로 영문자, 숫자, 특수 문자에 고유의 숫자를 부여한 것
- 7비트의 조합으로 이루어져 총 128(2^7) 개를 사용
- 영문자만 존재하여 한글과 타 언어는 표현 X
→ 이 점을 보완한 것이 유니코드(16비트)
char c = 'A';
// 변수 c 출력하기
System.out.println(c); // 출력: A
// 선언 없이 문자 출력
System.out.println('A'); // 출력: A
// char 타입 정수(아스키코드)로 변환
int d = 'A';
System.out.println((int)c); // 출력: 65
System.out.println((int)'A'); // 출력: 65
System.out.println(d); // 출력: 65
// char 타입 변수와 또 다른 Char 타입 변수 연산하기
// 할당된 문자 리터럴이 컴퓨터에 저장될 떄 아스키코드 값으로 치환이 되었고,
// 더하기 연산자를 사용하면서 int로 변형 발생
char a = 'A';
System.out.println(c + a); // 출력: 130
// char, 정수 연산
System.out.println(c + 1); // 출력: 66
System.out.println((char)(c + 1)); // 출력: B
문자열 클래스: String
지난번 문자열 클래스 참고하세용~가리
2023.06.01 - [CS] - [Java]문자열 클래스
[Java]문자열 클래스
[JAVA] 문자열 클래스 1. String 특징 new 연산을 통해 생성된 인스턴스의 메모리 공간은 변하지 않음(Immutable) -> 힙 메모리(Heap) Garbage Collector로 제거되어야 함 문자열 연산 시 새로 객체를 만드는 Overh
kjk04021.tistory.com
String
- 자바에서 제공하는 문자열 클래스
- 문자(char)들의 배열을 의미
- String 클래스 타입은 큰 따옴표(” “)로 감싸서 표현
- 미리 구현된 다양한 메서드를 통해서 다룰 수 있음
String은 단순히 타입이 아니다. 자바에서 구현된 클래스.
이에 따라 실제로 선언할 때는 변수에 값을 저장하는 방식이 아닌 하나의 객체를 생성하고, 해당 객체에 문자들을 연결시키는 방식.
// new 연산자를 사용해서 객체를 생성하고 문자열을 대입하는 방식
String 변수 = new String("문자열");
// 변수에 직접 대입하는 방식으로도 사용 가능
String 변수2 = "문자열";
String 인스턴스는 한 번 생성되면 그 값을 읽기만 할 수 있고, 변경할 수 없다.
이러한 객체를 불변 객체(immutable object)라고 한다. 즉, 덧셈 연산자를 사용해서 문자열과 문자열을 더한다면, 새로운 String 인스턴스가 생성되는 것.
String str1 = "Hello";
String str2 = "Java";
String str3 = str1 + str2; // "HelloJava"
String str1 = "JAMES";
String str2 = "JAMES";
String str3 = new String("JAMES");
System.out.println(str1 == str2); // 출력: true
System.out.println(str1 == str3); // 출력: false
why?

String에서 문자열 리터럴을 선언할 때 리터럴이 같으면 변수는 같은 참조값(주소값)으로 할당을 받게 된다. 따라서 == 연산자를 사용했을 때 true를 반환한 것
반면 객체를 생성하는 방식은 아래 그림과 같이 새로운 참조값(주소값)으로 할당받는다. 따라서 ‘==’ 연산자에서 false를 반환

String은 char와 어떻게 다른가?
char | String |
문자 | 문자열 |
기본형 타입 | 클래스 |
// String 은 빈문자열과 null로 초기화 가능
String str = "";
String str1 = null;
// char 는 빈문자열(공백X) 과 null로 초기화 불가능
char ch = ''; // X
char ch = null; // X
char을 문자열로 변환하는 방법
- String.valueOf(char)
char a = '안';
char b = '녕';
String test = String.valueOf(a) + String.valueOf(b);
System.out.println(test); // 안녕
- Characer 클래스의 toString()
char a = '안';
char b = '녕';
String test = Character.toString(a) + Character.toString(b);
System.out.println(test); // 안녕
- 문자를 빈 문자열과 연결하여 문자열로 변환
char a = '안';
char b = '녕';
String test = "" + a + b;
System.out.println(test); // 안녕
참고
https://github.com/backtony/Backend_Interview_for_Beginner/blob/master/Java.md
https://kang-james.tistory.com/entry/JAVA-파헤치기-문자-타입-char-와-문자열-String-의-진실
'CS > Java' 카테고리의 다른 글
[java] 추상 클래스와 인터페이스 차이 (0) | 2023.07.14 |
---|---|
[java] final vs finally vs finalize (0) | 2023.06.30 |
[Java] == 와 equals 차이 (1) | 2023.06.15 |
[Java] Object 클래스 (0) | 2023.06.01 |
[Java]문자열 클래스 (0) | 2023.06.01 |