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
반응형
728x90

 

println()

printf()

두가지로 추가 연습

 

728x90
반응형
728x90

 

 

728x90
반응형
728x90

5.변수, 상수, 리터럴

 

변수(variable) : 하나의 값을 저장하기 위한 공간

상수(constant) : 번만 값을 저장 가능한 변수

  • 생성법 : 변수의 선언법과 같고 타입 앞에 final 추가해주면
  • 한번 값을 저장하면 수정 불가
  • 수정 시도시 에러 발생

리터럴(literal) : 자체로 값을 의미하는

  • 상수와 같은 개념. 상수와 구분하기 위한 용어

 

색깔별로 변수,상수,리터럴 구분한 예시

 

 

 

728x90
반응형

+ Recent posts