Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 사용자입력Switch문
- 증감연산자
- 다차원배열
- 참조형호출
- 타입변환
- 논리 쉬프트 연산자
- 삼항 연산자
- 대입 연산자
- dowhile문
- 비교연산자
- println()
- 기본형호출
- 자바
- 산술 쉬프트 연산자
- 문자열
- 콘솔출력문
- array
- print()
- 변수유효범위
- 비정방행렬
- 명명규칙
- 순환문
- while문
- 단순if
- 안드로이드스튜디오
- Java
- 배열
- 다중if
- for문
- 비트논리연산자
Archives
- Today
- Total
신입개발자
연산에서의 타입 변환 본문
public class 연산에서의타입변환 {
public static void main(String[] args) {
byte b = 10; // 우변 리터럴은 byte 허용범위내이므로 byte <- (byte)int 로 자동변환됨
short s = 20; // 우변 리터럴은 short 허용범위내이므로 short <- (short)int 로 자동변환됨
// byte b2 = b + s; // 에러
}
}
[ byte b2 = b + s; 가 에러 나는 이유 ]
컴파일 당시에는 b, s값을 아직 모르는 상태이므로 우변의 덧셈결과를 int로 가정한다.
왜냐하면 메모리 처리의 효율성을 위해 자료형의 최소단위를 int로 한정하기 때문이다. 즉, byte <- int인 상태이다.
package pk07;
public class 연산에서의타입변환 {
public static void main(String[] args) {
// byte b2 = (byte)b + (byte)s; // 에러, 우변 전체에서 여전히 에러
// byte b2 = (byte)(b + s); // 가능하지만 억지
int b2 = b+s; // int <- int 추천
System.out.println("b2 = "+ b2); // 30
int i = 7 + 3; // int <- int
System.out.println("i = " +i); //10
i = 7/3; // int <- int
System.out.println("i = " +i); //2 , 몫구하기
// i = 7 + 3.9;
// int <- double, 컴파일러는 (double)7 + 3.9 처럼 자료를 잃지않는 방향으로 자동변환
// i = 7 + (int)3.9; // 10, 가능하기는 하지만 값손실 각오해야함
i = (int)(7 + 3.9); // 10, 상동
double i2 = 7 + 3.9; // double <- double 추천
System.out.println("i2 = " +i2); //10.9
float f = 7 / 3; // float <- int
System.out.println("f = "+f); //2.0, 정수값을 실수화했을 뿐 여전히 몫
// f = 7. / 3; // 오류, float형의 우변 리터럴은 무조건 F접미사
f = 7.F / 3; //OK, float <- float 우변의 한쪽값만 실수화 시켜도 됨
System.out.println("f = "+f); //2.3333333
double d = 7./3;
System.out.println("d = "+d); //2.3333333333333335
}
}
Comments