2020. 8. 18. 22:21ㆍJava/Java
자바에서는 규칙에 따라서 자료형을 변환할 수 있다.
크게 자동형변환, 강제형변환 두 가지 방법이 있다.
1. 자동 형변환자동형변환(=묵시적인 형변환) 소--->대
1) 값을 저장시
2) 계산중간에(=연산할때) 자동으로 바뀌는 경우
자료형의 크기 비교 => 소========================>대
byte->short->int->long->float->double
char
소=======================> 대 자동형변환 방향
ex)
int+double=>double+double
3+5.7===>3.0+5.7=8.7
boolean은 형변환X (배제)
2.강제형변환(=명시적인 형변환)
=>명확하게 형변환을 표시해줘야 된다.
형식) (변환시킬 자료형)변수명
ex) float f=3.5; //double (8) float f=(float)3.5;
4 3.5f
public class Op5Cast {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("자동 형변환");//p61
//1. 적은데이터가 큰 데이터공간에 저장->자동으로 형변환(메모리 낭비 심하다)
//1 4 8 16 32 64 128
//byte s=12; 00001100
short s=12; // 00000000 00001100
int n=s; //00000000 00000000 00000000 00001100
//2.계산 중간에 자료형이 변환
char c='A'; //65
int n2=c+1; //char(2byte)+int(4byte)=>int(65)+int(1)=66
System.out.println("n2=>"+n2);
//int(4) ->char(2)
System.out.println("(char)n2=>"+(char)n2);//명시적인 형변환
//명시적인 형변환=>단점=>데이터 손실이 일어날 수 있다.
int su=(int)3.5;
System.out.println("su=>"+su);
int x=123;
float y=x+12.3f;//int+float=>float+float=>123.0f+12.3f
System.out.println("y=>"+y);
byte s2=12; short s3=45;
System.out.println("형변환 주의할점");
int re=s2+s3;//byte+short=>short+short=>int(연산의 기본 자료형은 int)
//int +float or double=>float,double로 변환
//byte,short==>int 범위내에 존재=>int
short re2=(short)(s2+s3);//수식의 경우에는 ( )로 묶어줄것.
System.out.println("re=>"+re);
System.out.println("re2=>"+re2);
}
}
문자 -> 숫자 자동 형변환시 IllegalFormatConversionException 발생
문자=>숫자로 자동으로 변환이 안되서 발생된 예외처리 클래스이다. (문자는 숫자로 자동형변환이 안된다. => char을 int로 강제형변환 해야 함)
public class Op6Cast2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int num1=20,num2=30;
//printf(출력양식,,,출력할 대상자)->%d(정수값),%c(문자),%s(문자열),%f(소수점)
System.out.printf("첫번째 숫자=%d,두번째 숫자=%d",num1,num2);
System.out.println();//줄바꿈 역할
System.out.print('\n');//특수기호를 이용해서 줄바꿈
System.out.println("첫번째 숫자="+num1+",두번째 숫자="+num2);
//형변환
char ch='A';
System.out.printf("문자 %c의 유니코드 값은 %d\n",ch,(int)ch);//문자 강제형변환
//-------------------------------------------------------------------
int ch2=ch; //char->int으로 변환 ->문자에 해당되는 아스키코드값으로 저장
System.out.println("ch2=>"+ch2);
//종합문제
int java=90,jsp=85,oracle=70;
//총점
int sum=java+jsp+oracle;
System.out.printf("sum=%d입니다", sum);
System.out.println();
//평균
int avg=sum/3; //소수점이 있어도 버리고 정수만 계산(int)
double avg2=sum/3; //81.0
System.out.println("avg=>"+avg+",avg2=>"+avg2);
//소수점이 나오는 계산=>정밀한 값 그대로 저장->double형으로 형변환
double avg3=(double)sum/3;
System.out.println("avg3=>"+avg3);
//형식)%f->%.소수점자리수f->%.2f
System.out.printf("평균(avg3):%.2f",avg3);
}
}
'Java > Java' 카테고리의 다른 글
Java - 캡슐화 (0) | 2020.08.19 |
---|---|
Java - Java(객체지향 프로그래밍)의 특징 (0) | 2020.08.18 |
Java - 연산자2(관계연산자, 논리연산자,대입연산자, 삼항연산자) (0) | 2020.08.18 |
Java - 산술, 증감 연산자 (0) | 2020.08.18 |
Java - 자료형 (0) | 2020.08.18 |