int height; //정수(int)값을 저장할 수 있는 height 변수 선언
double weight; //실수(double)값을 저장할 수 있는 weight 변수 선언
int age = 28;
//28을 변수 age에 대입(초기값)
double weight; //초기화하지 않고 선언만 가능(메모리 할당X )
int a = 10; //변수 a에 10의 값 초기화
int b = a; //변수 b에 b를 대입
| 값의 분류 | 기본 타입 |
|---|---|
| 정수 | byte, char, short, int, long |
| 실수 | float, double |
| 논리(true/false) | boolean |
| 타입 | 메모리 크기 |
|---|---|
byte | 1byte(8bit) |
short | 2byte(16bit) |
char | 4byte(32bit) |
int | 4byte(32bit) |
long | 8byte(64bit) |
long 타입은 수치가 큰 데이터를 다루는 프로그램에서 사용.int 타입 값으로 해석하기 때문에 int 타입의 허용 범위를 초과하는 리터럴은 뒤에 ‘l’이나 ‘L’을 붙여 long 타입 값임을 컴파일러에 알려주어야함long value = 100000000000000; //컴파일 에러 발생
long value = 100000000000000L; // 편-안
char 타입 사용char value = 'A'; //'A'와 매핑되는 숫자 65
char value2 = 65; // 10진수 65와 매핑되는 문자 'A'
char value3 = ' '; // 공백 한 칸으로 변수 초기화/빈(empty)문자 대입시 컴파일 에러 발생
| 타입 | 메모리 크기 |
|---|---|
float | 4byte(32bit) |
double | 8byte(64bit) |
double 타입이 float 타입보다 큰 실수를 저장할 수 있으며 정밀도 또한 높음float보다 2배의 정밀도를 갖는다는 의미에서 붙여짐double 타입 값으로 해석하기 때문에 float 타입의 허용 범위를 초과하는 리터럴은 뒤에 ‘f’이나 ‘F’을 붙여 float 타입 값임을 컴파일러에 알려주어야함float value = 3.14; // 컴파일 에러 발생
float value = 3.14f;
float value2 = 3E6F;
boolean 타입 사용boolean stop = true;
if(stop) {
System.out.println("중지");
} else {
System.out.println("시작");}
//출력값 = 중지
String 타입 변수(String타입은 참조 타입이다)char value = "A" //컴파일 에러 발생
char value2 = '김영태' // 컴파일 에러 발생
String value = "A";
String value2 = "이병건"
| 이스케이프 문자 | |
|---|---|
| \” | “ 문자 포함 |
| \’ | ‘ 문자 포함 |
| \ | \ 문자 포함 |
| \u16진수 | 16진수 유니코드에 해당하는 문자 포함 |
| \t | 출력 시 탭만큼 띄움 |
| \n | 출력 시 줄바꿈(라인피드) |
| \r | 출력 시 캐리지 리턴 |
byte < short, char < int < long < float < double
byte byteValue = 10;
int intValue = byteValue; // 자동 타입 변환
long longValue = 100000000L;
float floatValue = longValue; //5.0E9F로 저장
double doubleValue = longValue; // 5.0E9로 저장
char 타입 → int 타입 대입은 유니코드 값이 int 타입에 대입char charValue = 'A';
int intValue = charValue; //65 저장
byte 타입 → char 타입char 타입이 byte 타입보다 허용 범위가 크지만 byte 타입은 허용 범위에 음수를 포함하는데 반해 char 타입은 포함하지 않아 자동 타입 변환이 불가byte byteValue = 10;
char charValue = byteValue; // 컴파일 에러 발생
정수 타입 변수가 산술 연산식에서 피연산자로 사용되면 int 타입보다 작은 byte, short 타입의 변수는 int 타입으로 자동 변환되어 연산 수행
byte x = 10;
byte y = 20;
byte z = x + y; //컴파일 에러 발생
int z = x + y;
실수 연산
float result = 1.2f + 3.4f; // 피연산자에 모두 f가 붙어 있기에 float 타입으로 연산 수행
double result1 = 1.2f + 3.4; // 피연산자 중 하나가 double 타입이므로 연산 결과 또한 double 타입
연산자의 두 가지 기능
String str = 1 + "2" + 3; //str = "123"
String str = 1 + 2 + "3"; //str = "33"
int → byteint intValue = 10;
byte byteValue = (byte) intValue;4byte인 int 값의 끝 1byte 부분만 byte 타입 변수에 저장되고 나머지 3byte는 삭제
10진수 10은 앞의 3byte 부분이 삭제돼도 값의 변화가 없기 때문에 원래 값 10 그대로 보존
int intValue = 103029770;
byte byteValue = (byte) intValue; //출력값: 10
10진수 103029770은 앞 3byte 의 값이 삭제돼 값이 온전히 보존되지 못함
long → intint → charchar 타입의 허용 범위인 0~65535 사이의 값만 유지정수 타입 변수가 산술 연산식에서 피연산자로 사용되면 int타입보다 작은 byte, short타입의 변수는 int타입으로 자동 타입 변환되어 연산 수행
byte x = 10;
byte y = 20;
~~byte~~int result = x + y;
String result = “10” + 2 + 8;
System.out.println(result);
//실행 결과 = 1028
피연산자 중 하나가 문자열일 경우 나머지 피연산자도 문자열로 자동변환되어 문자열 결합 연산 수행
int eng = 100;
int kor = 95;
double avg = (eng + kor) / 2;
평균이 97.0 으로 정확한 답이 나오지 않음
→ int끼리 계산중 소수점이 짤리기 때문
→ 2를 2.0 혹은 'double(eng + kor)'으로 형변환
Scanner sc = new Scanner(System.in);
System.out.println("학점 (A, B, C, F) 입력");
char grade = sc.next().charAt(0);
System.out.println(grade);
System.out.println("두 점수입력");
int a = sc.nextInt();
int b = sc.nextInt();
System.out.println("평균" + (a + b) / 2.0);
System.out.println("이름: ");
String name = sc.next();
//변수선언 입력한 값 --> 이름을 입력하여 변수 name에 대입
System.out.println("점수: ");
int com = sc.nextInt();
System.out.println(name + " " + com);