논리형에는 'boolean' 한가지 밖에 없다. boolean형 변수에는 true와 false 중 하나를 저장할 수 있으며 기본값(default)은 false이다
boolean형은 true와 false, 두가지의 값만을 표현하면 되므로 1bit만으로도 충분하지만, 자바에서는 데이터를 다루는 최소단위가 byte이기 때문에, boolean의 크기가 1byte이다.
boolean power=true;
boolean checked=False;//에러. 대소문자가 구분됨.
자바에서는대소문자가 구별되기 떄문에 TRUE와 true는 다른 것으로 간주된다는 것에 주의하자
문자형 역시 'char' 한 가지 자료형밖에 없다. 문자를 저장하기 위한 변수를 선언할 때 사용되며, char타입의 변수는 단 하나의 문자만을 저장할 수 있다.
char ch='A'//문자 'A'를 char타입의 변수 ch에 저장
변수에 '문자'가 저장되는 것 같지만, 사실은 문자가 아닌 '유니코드(정수)'가 저장된다
문자 리터럴 대신 문자의 유니코드를 직접 저장할 수도 있다
char ch='A';
char ch=65;//문자의 코드를 직접 변수 ch에 저장
어떤 문자의 유니코드를 알고 싶으면, char형 변수에 저장된 값을 정수형(int)으로 변환하면 된다
int code=(int)ch;//ch에 저장된 값을 int타입으로 변환하여 저장한다
public class CharToCode {
public static void main(String[] args){
char ch='A';
int code=(int)ch;
System.out.printf("%c=%d(%#X) %n",ch,code,code);
char hch='가';
System.out.printf("%c=%d(%#X)%n",hch,(int)hch,(int)hch);
}
}
문자 '가'의 유니코드는 44032(16진수로 0xAC00)이라는 것을 알 수 없다
char hch=0xAC00;//char hch='가';
char hch='\uAC00';//이렇게도 가능
시퀀스 | 16진수 | 표현되는 문자나 기능 |
---|---|---|
\0 | \u0000 | 널 문자 |
\b | \u0008 | 백스페이스 |
\t | \u0009 | 탭(수평) |
\n | \u000A | 줄바꿈 |
\v | \u000B | 탭(수직) |
\" | \u0022 | 큰 따옴표 |
\' | \u0027 | 작은 따옴표 |
\\ | \u055C | 역슬래시 |
public class SpecialCharEx {
public static void main(String[] args){
System.out.println('\'');
System.out.println("abc\t123\b456");//실행결과는 abc 12456
System.out.println('\n');
System.out.println("\"Hello\"");
System.out.println("c:\\");
}
}
char타입의 크기는 2byte(16bit)이므로, 16자리의 2진수로 표현할 수 있는 정수의 개수인 65536개의 코드를 사용할 수 있으며, char형 변수는 이 범위 내의 코드 중 하나를 저장할 수 있다.
ㄴshort타입의 크기도 2byte(16bit)도 모두 65536개의 값을 표현할 수 있는데, char타입은 0~65535의 범위를 가지며, 정수형인 short은 절반을 음수표현에 사용하므로 -32768~32767을 범위를 갖는다
문자를 코드로 변환하는 것을 문자 인코딩, 그 반대로 코드를 문자로 변환하는 것을 문자 디코딩이라고 하며, 문자를 저장할 때는 인코딩을 해서 숫자로 변환해서 저장하고, 저장된 문자를 읽어올 때는 디코딩을 해서 숫자를 원래의 문자를 되돌려야 한다
public class OverflowEx {
public static void main(String[] args){
short sMin=-32768;
short sMax=32767;
char cMin=0;
char cMax=65535;
System.out.println("sMin = "+sMin);
System.out.println("sMin-1= "+(short)(sMin-1));
System.out.println("sMax = "+(sMax));
System.out.println("sMax+1= "+(short)(sMax+1));
System.out.println("cMin = "+(int)cMin);
System.out.println("cMin-1= "+(int)--cMin);
System.out.println("cMax = "+(int)(cMax));
System.out.println("cMax+1 = "+(int)++cMax);
}
}
sMin-1 -> sMax
sMax+1 -> sMin
cMin-1 -> cMax
cMax+1 -> cMin
float타입과 같은 실수형은 '부호(S), 지수(E), 가수(M)', 세 부분으로 이루어져 있다. 실수형에는 표현할 수 있는 값의 범위뿐만 아니라 '정밀도(precision)'도 중요한 요소이다
public class FloatEx1 {
public static void main(String[] args){
float f=9.12345678901234567890f;
float f2=1.234567890234567890f;
double d=9.12345678901234567890d;
System.out.printf(" 123456789012345678901234%n");
System.out.printf("f : %f%n",f);
System.out.printf("f : %24.20f%n",f);
System.out.printf("f2 : %24.20f%n",f2);
System.out.printf("d : %24.20f%n",d);
}
}
%f는 기본적으로 소수점 이하 6자리까지만 출력하므로, 7번째 자리에서 반올림한다