| char값 | int값 |
|---|---|
| 'a' | 97 |
| 'A' | 65 |
| '가' | 44032 |
| '힣' | 55203 |
아스키 코드 (ASCII, American Standard Code for Information Interchange)
컴퓨터에서 문자를 표현하기 위해 사용되는 표준 인코딩.
초기에는 7비트로 128개의 문자 표현.
확장된 아스키는 8비트를 사용하여 256개의 문자를 표현.
상기 표에서 알파벳에 해당한다.
유니코드(Unicode)
유니코드는 전 세계의 모든 문자를 하나의 표준으로 표현하기 위한 국제 표준. 초기에는 16비트(2바이트)로 표현.
나중에 21비트(4바이트)로 확장.
상기 표에서 한글에 해당한다.
문자열 풀
다음 두 String 객체는 주소값을 비교하면 동일하다는 결과가 나온다.
String str1 = "Hello";
String str2 = "Hello";
같은 문자열 값을 사용 하는 경우는 동일한 문자열 객체를 공유하도록 JVM이 최적화를 수행한다.
즉 문자열 변수를 초기화 할때 JVM이 문자열 풀을 찾아보고 동일한 문자열이 있는 경우 해당 문자열객체를 할당한다.
String의 불변성(Immutable)
String 클래스로 한 번 생성된 문자열객체는 변경할 수 없다.
문자열에 수행되는 모든 연산은 새로운 문자열을 반환합니다.
StringBuffer과 StringBuilder
가변(mutable)한 특성을 가지고 있어서, 문자열이 변경 될 때마다 새로운 객체를 생성하지 않고, 이미 가지고있던 객체를 수정할 수 있다.
차이점은 StringBuffer은 멀티쓰레드 환경에서도 안전하다는 것이다.
동등성 (Equality)
객체의 내용이 같은지를 비교
즉, 객체의 상태나 값이 동일한 경우 두 객체는 동등하다. equals로 비교.
동치성 (Equivalence):
두 객체가 메모리 상에서 동일한 객체인지를 나타낸다. ==로 비교.
아래 코드 실행시, 문자를 입력하면 오로지 캐치문만 반복 실행된다.
int a = 0;
while(true) {
System.out.print("숫자 : ");
try {
a= sc.nextInt();
break;
}catch(InputMismatchException e) {
System.out.println("숫자 써라");
sc.nextLine();
}
}
계속해서 오류가 일으킨 문자값이 입력스트림(System.in)에 남아있고, Scanner 객체가 계속해서 이 남아있는 문자값을 읽고 있기 때문에 오류가 발생한 것이다.
sc.nextLine()을 캐치문에 넣어, 오류시 스트림을 비워주는 처리를 하면 문제는 해결된다.