반응형
- 형변환(TypeCast) : 값의 자료형을 일시적으로 변환하여 사용하는 방법
→ JVM이 알아서 해주는 자동 형변환과 개발자가 직접해주는 강제 형변환이 있다. - 자동 형변환 : 자료형이 다른 값을 연산하기 위하 JVM(Java Virtual Machine : Java 프로그램)이 값의 자료형을 일시적으로 실행하기 위한 가상의 플랫폼이 값의 자료형을 일시적으로 변환하여 사용하는 방법
→ 표현의 범위가 작은 자료형의 값을 큰 자료형의 값으로 형변환하여 연산 처리(byte 크기를 비교하는게 아님)
→ byte >> short >> char >> int >> long >> float >> double - 강제 형변환 : 개발자가 Cast 연산자를 사용하여 값을 원하는 자료형의 값으로 일시적으로 변환하여 사용하는 방법
→ Cast 연산자 : (자료형)값
package basic;
//형변환(TypeCast) : 값의 자료형을 일시적으로 변환하여 사용하여 방법
//=> 자동 형변환(JVM), 강제 형변환(개발자)
public class TypeCastApp {
public static void main(String[] args) {
/*자동 형변환 : 자료형이 다른 값을 연산하기 위하 JVM(Java Virtual Machine : Java 프로그램)이 값의 자료형을
일시적으로 실행하기 위한 가상의 플랫폼이 값의 자료형을 일시적으로 변환하여 사용하는 방법
*/
//=> 표현의 범위가 작은 자료형의 값을 큰 자료형의 값으로 형변환하여 연산 처리(byte 크기를 비교하는게 아님)
//=> byte >> short >> char >> int >> long >> float >> double
System.out.println("결과 = "+(3+1.5)); // 3(int) + 1.5(double) >> 3.0(double) + 1.5(double) = 4.5(double)
double su=10; // 10 >> 10.0 (실수값 변수에 정수는 원래 저장 안되는데 넘치는게 없어서 일시적으로 10을 10.0으로 변환
System.out.println("su = "+su);
//int su=10.0; 작은 변수에 큰 값을 넣으려 하니 에러난다.
System.out.println("결과 = "+(95/10)); // int / int >> int ==> 형변환 없어서 정수로 나옴
System.out.println("결과 = "+(95.0/10.0)); // double / double >> double
System.out.println("결과 = "+(95.0/10)); // double / int(double) >> double (자동 형변환)
System.out.println("결과 = "+(95/10.0)); // int(double) / double >> double (자동 형변환)
System.out.println("결과 = "+(95/10.)); // 소수점 .0 은 .만 써도 됨
int kor=95, eng=90; //점수를 입력받아 저장
int tot=kor+eng; //총점을 계산하여 저장
//double ave=tot/2; //평균을 계산하여 저장 - 연산 결과값(평균) : 정수
double ave=tot/2.; //평균을 계산하여 저장 - 연산 결과값(평균) : 실수(뒤에 .을 붙여서)
System.out.println("총점 = "+tot+", 평균 = "+ave);
//int 자료형보다 작은 자료형(byte >> short >> char)의 값을 연산할 경우 무조건 int 자료형으로 형변환되어 연산
byte su1=10, su2=20;
//byte su3=su1+su2; // byte + byte >> int + int >> int(연산결과값) 이 됨 - 얘를 byte 변수에 저장할 경우 에러 발생
int su3=su1+su2;
System.out.println("su3 = "+su3);
System.out.println("====================================================================");
//강제 형변환 : 개발자가 Cast 연산자를 사용하여 값을 원하는 자료형의 값으로 일시적으로 변환하여 사용하는 방법
//=> Cast 연산자 : (자료형)값
int num=(int)12.3; // (int)12.3 >> 12
System.out.println("num = "+num);
int num1=95, num2=10;
//double num3=num1/num2; //연산 결과값 : 9 >> 변수값 : 9.0(결과값은 9가 나오나 변수값은 9.0으로 된다)
//System.out.println("num3 = "+num3);
double num3=(double)num1/num2; //연산 결과값 : 9.5 >> 변수값 : 9.5(결과값은 9가 나오나 변수값은 9.0으로 된다)
System.out.println("num3 = "+num3);
//큰 정수값은 [_] 기호를 사용하여 표현 가능
int num4=100_000_000, num5=30;
//문제점) 정수값은 4Byte(-2147483648~2148483647)로 표현되므로 연산 결과값이
//4Byte의 표현의 범위를 벗어날 경우 잘못된 결과값(쓰레기값)이 발생되어 변수에 저장됨.
//int num6=num4*num5;
//System.out.println("num6 = "+num6);
//정수값은 21억까지인데 연산결과값이 30억이다. 그래서 넘치게 되는 쓰레기 값을 변수에 저장
//해결법) 연산 결과값이 4Byte의 표현범위를 벗어날 경우 8Byte(LongType)으로 연산처리 되도록
//피연산자를 강제 형변환 하여 연산처리 - 연산 결과값을 저장할 변수도 long 자료형으로 선언해주면 됨
long num6=(long)num4*num5;
System.out.println("num6 = "+num6);
double number=1.23456789;
System.out.println("number = "+number);
//변수에 저장된 실수값을 소수점 2번째 자리까지만 출력되도록 변환 처리
System.out.println("number(내림) = "+(int)(number*100)/100.); //중요한건 실수로 나눠줘야 함
System.out.println("number(반올림) = "+(int)(number*100+0.5)/100.);
System.out.println("number(올림) = "+(int)(number*100+0.9)/100.);
}
}
반응형
'IT개발 > JAVA' 카테고리의 다른 글
JAVA 수업 복습 정리(8)_제어문(if, switch, for, while, break, continue, return)/Operator/java/프로그래밍 (0) | 2024.08.05 |
---|---|
JAVA 수업 복습 정리(7)_연산자/Operator/java/프로그래밍 (0) | 2024.08.03 |
JAVA 수업 복습 정리(5)_자료형/리터럴/값/java/프로그래밍 (0) | 2024.06.01 |
JAVA 수업 복습 정리(4)_변수/리터럴/값/java/프로그래밍 (0) | 2024.05.31 |
JAVA 수업 복습 정리(3)_github/git/java/jdk/프로그래밍 (0) | 2024.05.01 |
댓글