프로모션(Promotion)과 캐스팅(Casting)
//프로모션과 캐스팅
public class Exam_01 {
	public static void main(String[] ar) {
		byte a = 0;
		short b = 200;
		
		//b=a; 한다면  Promotion
		//a=b; 한다면 Casting => 당장에 10은 byte에 들어갈 수 있는 값이지만, 문법적으로 short가 byte에 넣을 수 없기 때문에 이클립스에서 오류가 남.
		
		
		a=(byte)b; // short형 변수인 b를 byte로 바꿔주고자 할때 b 앞에 ()에 byte를 씀.
		
		System.out.println(a);
		
		//값이 200인 상태로 byte에 들어가면 들어갈 수 없는 값이기 때문에 
		//데이터손실이 발생되어 엉뚱한 값이 들어가게 됨.
		
	}
}

 

 

//프로모션&캐스팅
public class Exam_02_0 {
	public static void main(String[] ar) {
		byte b = 10;
		short s = 20;
		char c = 'A';
		int i;
		float f;
		long l = 100L;
		
/*
 * 문제
 * s = b;
 * c = b;
 * s = c;
 * c = s;
 * i = 100L;
 * l = 500;
 * f = l;
 * f = 5.11;
 * 
*/
		s = b; //Promotion
		c = (char)b; //Casting 캐릭터에 음수를 대입할 수 없기 때문에
		s = (short)c; //Casting 캐릭터가 Short형보다 너무 큰 숫자를 가질 수 있어서
		c = (char)s; //Casting  위와 상동
		i = (int)100L; //Casting 숫자에 L이 붙으면 long(8byte)이기 때문에 int형으로
		l = 500; //Promotion 
		f = l; //Promotion 실수형은 정수형보다 크다
		f = (float)5.11; // Casting 실수형에 대한 기본적인 평가가 Double이기 때문에 Casting을 하거나 숫자 뒤에 f를 써줘야함.
	
		
		
	}
}

 

 

public class Exam_02_1 {
	public static void main(String[] ar) {
		byte b=10;
		char ch='A';
		int i=100;
		long l = 1000L;
		
		b= (byte)i;
		ch=(char)b;
		short s=(short)ch;
		float f= l;
		i=ch;
				
		//실수형은 정수형보다 크기 때문에 
		//float형 변수 f에 long형 l의 값을 대입할때 Casting은 필요없다.
		
		//int형은 4byte이고 char형은 2byte이기 때문에
		//Promotion이 발생하여 Casting할 필요가 없다.
	}
}

 

public class Exam_02_2 {
	public static void main(String[] ar) {
		int i1=10;
		int i2=20;
		float f1=3.14f;
		char c1='A';
		char c2='B';
		
		System.out.println("결과 : " + i1 + i2);
		System.out.println("결과 : " + (i1 + i2));
		System.out.println("결과 : " + i1 + f1);
		System.out.println("결과 : " + (i1 + f1));
		System.out.println("결과 : " + f1 + c1);
		System.out.println("결과 : " + (f1 + c1));
		System.out.println("결과 : " + c1 + c2);
		System.out.println("결과 : " + (c1+c2));
	
		
		/*
		 * <내가 생각했던 결과값>
		 * 결과 : 1020
		 * 결과 : 30
		 * 결과 : 103.14
		 * 결과 : 13.14
		 * 결과 : 3.14A
		 * 결과 : 3.14A
		 * 결과 : AB
		 * 결과 : AB
		 * 
		 * <실제결과>
		 * 결과 : 1020
		 * 결과 : 30
		 * 결과 : 103.14
		 * 결과 : 13.14
		 * 결과 : 3.14A
		 * 결과 : 68.14  
		 * ==> float(4byte), char(2byte)로 
		 * char형이 float으로 Promotion되어 
		 * 3.14와 A의 아스키코드값이 덧셈연산됨  
		 * 결과 : AB
		 * 결과 : 131    
		 * ==> 연결되는건 String타입끼리임, 
		 * char는 엄밀히 문자인척하는 숫자값이므로 
		 * 아스키코드값끼리 덧셈연산을 하게 됨
		 * 
		 */
		
		
	}
}