일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Method
- Number Theory
- greedy
- sorting
- SQL
- Matrix
- Tree
- java
- Binary Search
- Counting
- database
- 파이썬
- Math
- geometry
- 구현
- bit manipulation
- 코테
- Data Structure
- array
- Class
- simulation
- implement
- Binary Tree
- string
- Stack
- 코딩테스트
- hash table
- 자바
- dynamic programming
- two pointers
- Today
- Total
코린이의 소소한 공부노트
문자와 문자열 본문
문자는 문자형 char의 리터럴이다.
char c1 = 'A'; // 작은 따옴표로 문자를 둘러싸면 된다.
char c2 = 'AB'; // 에러 발생 - 문자는 1개만 저장 가능
참조형인 String도 문자 리터럴을 사용하여 선언한다.
String s1 = "ABC"; // 큰 따옴표로 문자를 둘러싸면 된다.
String s2 = new String("ABC"); // ??
s2 변수를 선언할 때 기존 것과 차이가 있음을 알 수 있다. String은 클래스인데, 클래스는 객체를 new 키워드를 이용해 생성한다. 그런데 특별히 String만 기본형에 값을 저장하는 것과 같은 표현을 허용한다. 원칙은 s2 변수처럼 초기화를 하는 게 맞지만, s1처럼 초기화를 하는 것이 편하기 때문에 이를 더 많이 쓴다.
초기화만 기본형처럼 할 수 있는것이 아니라, 결합도 기본형처럼 가능하다.
// +를 이용해 숫자처럼 연산할 수 있다.
// 이때 결과는 문자를 코드로 바꾼 값의 합이 아닌
// 문자열의 결합이다.
String s = "A" + "B";
// A의 코드: 10진수 65
// B의 코드: 10진수 66
// s에 저장되는 값은 코드가 131에 해당하는 문자가 아니라 "AB"
문자열 결합은 숫자와 문자열 사이에서도 가능하다.
String s1 = "" + 1; // 결과는 "1"
// "" + 1 -> "" + "1" -> "1"
String s2 = "" + 1 + 1; // 결과는 "11"
// "" + 1 + 1 -> "1" + 1 -> "1" + "1" -> "11"
String s3 = 1 + 1 + ""; // 결과는 "2"
// 1 + 1 + "" -> 2 + "" -> "2" + "" -> "2"
문자열과 숫자를 결합하면 왼쪽에서 오른쪽으로 숫자가 문자열로 자동 변환이 되어 결합되는데, 순서에 따라 결과가 달라질 수 있으니 의도한 대로 결합이 이루어지게 확인해 볼 필요가 있다.
char도 String도 문자를 저장하지만, 타입 차이, 저장 가능 문자 개수 차이 외에도 차이점이 또 있다.
char c = ''; // 에러 발생 - char는 반드시 문자 1개를 저장해야한다.
String s = ""; // String은 빈 문자열 저장이 가능하다.
변수 c를 출력할 때 굳이 빈 것으로 출력하고 싶다면, 공백 문자(space바)를 하나 넣으면 출력 시에는 빈 것으로 보인다. 하지만 실제로는 빈 문자가 아닌 공백 문자 1개가 들어가 있다는 것을 명심해야 한다.
[쿠키글] 참조형 변수의 기억공간은?
String a = new String("abcd");
위 코드를 작성하면 벌어지는 일을 순서대로 표현해보면 아래와 같다.
1. String 타입의 변수 a가 만들어진다. 이때 기억공간의 크기는 4 byte이다.
2. 문자열 "abcd"를 담은 String 객체가 만들어진다.
3. 2번에서 만들어진 객체의 주소가 a에 저장된다.
1~3번의 그림을 합쳐서 가장 오른쪽 그림처럼 간단하게 표현하기도 한다.
만약 여기에서 참조형 변수 a가 어떠한 객체도 참조하고 있지 않게 만들고 싶다면,
a = null;
을 쓰면 된다. 여기서 null은 비어있다는 것을 나타내는 것으로, 0과는 다르다(0은 0이라는 값이 있는 것). 이걸 쓰면 a에는 객체의 주소가 아닌 null값이 들어가게 되고, 화살표는 지워지게 된다.
'Java' 카테고리의 다른 글
Scanner를 이용해 값을 직접 입력해서 화면에 출력하기 (0) | 2021.12.12 |
---|---|
printf()를 이용한 형식화된 출력 (0) | 2021.12.12 |
변수와 리터럴의 타입 일치/불일치 (0) | 2021.12.08 |
변수, 상수(constant), 리터럴(literal), 접미사 (0) | 2021.12.07 |
변수 선언 & 명명 규칙 (0) | 2021.12.06 |