| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- 새싹 출력
- 논리연산자
- 콘솔로 변수값 출력
- 이클립스
- HTML
- oracle
- 위치속성
- 박스 모델의 성격
- CSS 박스모델 구성
- ul 태그
- 연산의 방향
- 정수 연산
- 논리부정
- background-repeat 속성
- 실수 타입
- java
- 부호/증감 연산자
- 강아지 출력
- background-size 속성
- 키보드입력데이터
- 삼항연산자
- 연산자
- CSS
- 백준 문제풀기
- 데이터베이스
- 자바
- CSS 정리
- 고양이 출력
- 변수사용범위
- 대입연산자
- Today
- Total
너와 나의 개발 고리
[JAVA] chap02 변수와 타입_연산식에서 자동 타입 변환 본문
자바는 실행 성능을 향상시키기 위해 컴파일 단계에서 연산을 수행한다.
정수 리터럴 10과 20을 덧셈 연산해서 결과를 byte 타입 변수 result에 저장하는 코드가 있다고 가정해보자
byte result = 10 + 20; // 컴파일 : byte result = 30;
자바 컴파일러는 컴파일 단계에서 미리 연산하여 30을 만들고 result 변수에 30을 저장하도록 바이트 코드를 생성한다.
하지만 정수 리터럴이 아니라 변수가 피연산자로 사용되면 실행 시 연산을 수행한다.
int 타입보다 작은 byte, short 타입의 변수는 int 타입으로 자동 타입변환되어 연산을 수행한다.

| byte 타입 변수가 피연산자로 사용된 경우 | int 타입 변수가 피연산자로 사용된 경우 |
| byte x = 10; byte y = 20; int result = x + y; |
int x = 10; int y = 20; int result = x + y; |
위의 표처럼 byte 변수 x,y가 피연산자로 사용되면 변수값은 int 타입으로 변환되어 연산되고, 결과도 int 타입으로 생성된다.
따라서 결곽값을 byte 변수에 저장할 수 없고 int 변수에 저장해야한다.

정수 연산식에서 모든 변수가 int 타입으로 변환되는 것은 아니다.
int 타입보다 허용 범위가 더 큰 long 타입이 피연산자로 사용되면 다른 피연산자는 long 타입으로 변환되어 연산을 수행한다.

실수 연산자가 동일한 실수 타입이라면 해당 타입으로 연산된다
피연산자가 float 타입이면 float 타입으로 연산을 수행한다.
float result = 1.2f + 3.4f; // 컴파일 : float result = 4.6f;
피연산자 중 하나가 double 타입이면 피연산자도 double 타입으로 변환되어 연산되며 연산 또한 double 타입이 된다.

int 타입과 int 타입과 double 타입을 연산하는 경우에도 int 타입이 double 타입으로 자동 변환되고 연산을 수행한다.
int intValue = 10;
double doubleValue = 5.5;
double result = intValue + doubleValue; // 10.0 + 5.5
만약 int 타입으로 연산을 해야 한다면 double 타입을 int 타입으로 강제 변환하고 덧셈 연산을 수정하면된다.
int intValue = 10;
double doubleValue = 5.5;
int result = intValue + (int) doubleValue; // 10 + 5

'JAVA > 이것이 자바다' 카테고리의 다른 글
| [JAVA] chap02 변수와 타입_변수 사용 범위 (0) | 2023.08.07 |
|---|---|
| [JAVA] chap02 변수와 타입_문자열을 기본 타입으로 변환 (0) | 2023.08.07 |
| [JAVA] chap02 변수와 타입_강제 타입 변환 (0) | 2023.08.05 |
| [JAVA] chap02 변수와 타입_자동 타입 변환 (0) | 2023.08.03 |
| [JAVA] chap02 변수와 타입_문자열 타입 (1) | 2023.08.03 |