728x90

 

상수(Constant)

한번만 저장할 수 있는 변수

변하지 않는 변수

상수명 네이밍시, 전부 대문자 and 단어 사이는 언더바( _ )

final boolean **IS_FALSE** - false;

예약어(reserverd word) final 추가

public class B_Constant {
public static void finalConstant() {
	int age = 10;
	final int AGE = 10;
	
	System.out.println("age : " + age);
	System.out.println("AGE : " + AGE);
	
	age = 20;
//		AGE = 20; // 상수라 값 변경불가
	// error : The final local variable AGE cannot be assigned. 
	// It must be blank and not using a compound assignment
	
	System.out.println("age : " + age);
	System.out.println("AGE : " + AGE);
}
}

 


 

형변환(Casting)

자료형을 바꾸는 것

(boolean은 형변환 불가)

1)자동 형변환

2)강제 형변환

 

 

 

8byte long에서 4btye float로 변환될까?

가능. 정수보다 실수가 범위가 더 넓어서 가능.

바이트에 대한 상자크기

int a = 10;

int b = 10L; error

8byte인 long을 4byte인 int에 넣을려고 해서 에러

 

 

문자인 char를 숫자로 casting?

아스키코드에 char에 대한 숫자 변환 값이 나와있다.

숫자에서 char로도 변환가능

유니코드 : 아스키코드 확장형

 

1)자동형변환

int a = 12;

double d = 3.3;

데이터타입이 다른 int와 double의 계산?

일단가능

 

a+d의 데이터 타입은

자료형이 맞지 않으면

작은 크기 의 데이터값이 자동으로 형변환이 됨

 

short result = s + c ;

char result = s +c ;

 

float to long 형변환? 가능

작은거에서 큰거

큰거에서 작은거 둘 다 가능하나

// 1.자동 형변환
public void cast1() {
// 	 1)정수끼리 자동 형변환
	byte bNum = 3;
	int iNum = bNum; // 자동 형변환
//	 2)정수와 실수끼리의 자동 형변환
	long lNum = 100;// long으로 int로 자동 형변환
	byte b1 = 10;	// 4byte 정수 10 // byte 크기가 안맞는데, no error? byte저장 가능범위 : -128~127
//		byte b2 = 10L;  // 8byte 정수 10 // 1byte인 b2에 8byte짜리를 넣을려해서 error
					// byte의 저장 가능 범위(-128~127)를 넘어섰기에 에러
					// 리터럴. 값 유동적일 수 있음. int가 4byte이긴 하지만 리터럴이기 때문에 
					// 내가 받을 수 있는 범위 안에 들어오느냐를 먼저 확인해 볼 수 있음. 변수가 아니기에 각 데이터별 범위 안에만 있으면 허용가능
					// 각 데이터타입이 받을 수 있는 범위(변수 저장가능범위)부터 체크 데이터 타입 체크
//   3)정수와 문자끼리의 자동 형변환
	int num = 'A';
	char ch = 97;
	System.out.println("num : " + num);
	System.out.println("ch : " + ch);
	
//		char ch2 = num; // error :Type mismatch: cannot convert from int to char
	char ch2 = (char)num; // 강제 형변환 
	// 위에서 int num = 'A'는 잘run되고 결과값65를 얻었는데 왜 안될까?
	// 'A'는 리터럴이고 num은 변수. 리터럴이기에 변수저장 가능범위가 맞으면 형변환이 가능했던 것
	System.out.println("ch2 : " + ch2);
	
	int num1 = -10;
	char ch3 = (char)num1;
	System.out.println("ch3 : " + ch3); // 아스키코드 변환 ?가 아닌 어떤 문자로 매치될지 진짜 몰라서 나오는 ?

}

 

 

2)강제 형변환

크기가 큰 자료형이 크기가 작은 자료형으로 변환

강제 형변환시 데이터 손실이 발생할 수 있음

1btye = 8bit

8비트에서 16비트로 변환하면 남는 메모리 값(칸)을 0으로 채우면 되지만, 반대로 16비트에서 8비트로 줄어 들 때는 못집어 넣는 값이 생기면서 데이터 손실이 발생할 수 있음

강제 형변환은 자동으로 데이터 손실 가능성 때문에 잘 형변환 시키지 않는다.

int a = 12;
double d = 3.3;
int result = a + (int)d; // 강제 형변환

int i = (int)d; 

System.out.println(i);       // 결과값 3
System.out.println(result);  // 결과값 15
// 2.강제 형변환
public void cast2() {
	int iNum = 10;
	long lNum = 100L;
	
//		int result = iNum + lNum;	// 작은게 큰거를 따라감. int가 long으로 자동변환 되는데 담기는 그릇이 int라 error
	// iNum이 long으로 자동 형변환이 되어 계산 결과가 long타입이 되는데 그 값을 int에 넣으려하기 때문
	
	
	// 방법1. 수행 결과를 int로 강제 형변환
	int result1 = (int)(iNum + lNum);	// 계산순서 1. (iNum + lNum) 2. (int) 형변환
	
	// 방법2. long형 값을 int로 강제 형변환
	int result2 = iNum + (int)lNum;
	
	// 방법3. 결과값을 long형의 자료형으로 받기
	long result3 = iNum + lNum;
}

 

 

※ 컴퓨터의 연산의 원칙

  1. 같은 종류의 자료형 대입 가능
  2. 같은 종류의 자료형 계산 가능
  3. 같은 종류의 자료형 결과 도출

 

 

728x90
반응형

+ Recent posts