크기 순 정렬
byte < short < int < long < float < double
타입 | 메모리 | 허용 범위(언저리) |
---|---|---|
byte | 1byte | -128 ~ 127 |
short | 2byte | -3만 ~ 3만 |
char | 2byte | 0 ~ 65535(유니코드) |
int | 4byte | -20억 ~ 20억 |
long | 4byte | -900경 ~ 900경 |
기본적으로 컴파일러는 정수 리터럴을 int 타입으로 간주한다. 때문에 정수 리터럴이 int의 값을 초과하는 경우 컴파일 에러가 발생하는 경우가 있다. 따라서 이러한 경우에는 리터럴의 끝에 "L"을 붙여 long 타입임을 명시해야한다.
long test = 3000000000000; // Compile Error
long test = 3000000000000L;
타입 | 메모리 | 정밀도 |
---|---|---|
float | 4byte | 소수점 이하 7자리 |
double | 8byte | 소수점 이하 15자리 |
기본적으로 컴파일러는 실수 리터럴을 double 타입으로 간주한다. 때문에 실수 리터럴을 float타입에 저장하는 경우 컴파일 에러가 발생하는 경우가 있다. 따라서 이러한 경우에는 리터럴의 끝에 "F"을 붙여 float 타입임을 명시해야한다.
float test = 3.14; // Compile Error
float test = 3.14F;
크기 순 정렬
byte < short < int < long < float < double
크기에 따라 자동으로 타입 변환이 이루어지며, char를 int로 변환하면 유니코드 값이 저장된다. byte의 경우 char보다 크기는 작으나 음수를 포함하기 때문에 char로 변환될 수 없다.
[범위가 작은 타입] var = ([범위가 작은 타입]) [범위가 큰 타입 var]
int test1 = 10;
byte test 2 = (byte) test1 // 강제 타입 변환
실수 타입의 경우 정수 타입으로 강제 변환될 경우 소수점 이하를 생략하며, 정수 부분만 저장된다.
[변환 대상 타입] var = [변환 대상 타입].parse[변환 대상 타입](String var)
String str = "10";
byte var = Byte.parseByte(str);
String str = String.ValueOf(기본타입 var);
public static void main(String[] args) throws Exception {
int keyCode;
while(true) {
keyCode = System.in.read();
System.out.println(keyCode);
}
}
위 코드에서 System.in.read()는 Enter가 입력 되었을 때 실행된다. Enter가 입력되었을 때 System.in.read()는 가장 먼저 입력된 키코드를 반환하며, 이후 실행될 때마다 다음 순서의 키코드를 반환한다.
하지만 이러한 방식은 한글과 같은 2개 이상이 조합된 문자를 읽어낼 수 없다. 이러한 경우를 위해 Java는 Scanner 클래스를 제공한다.
public static void main(String[] args) throws Exception {
Scanner scanner = new Scanner(System.in);
String inputData;
while(true) {
inputData = scanner.nextLine();
System.out.println(inputdata);
}
}
위 코드에서 Scanner는 시스템의 입력장치로 부터 데이터를 읽어내고, 이를 변수(scanner)에 저장한다. Enter를 입력하는 경우 Enter 입력 이전에 입력된 모든 문자열을 scanner.nextline()이 읽어내고 리턴한다.
println(내용); // 내용을 출력하고 행을 바꿈
print(내용); // 내용을 출력함
printf("형식 문자열", var 1, var2); // 형식 문자열에 맞춰 값을 출력