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;
}
※ 컴퓨터의 연산의 원칙
- 같은 종류의 자료형 대입 가능
- 같은 종류의 자료형 계산 가능
- 같은 종류의 자료형 결과 도출
728x90
반응형
'JAVA > 개념정리' 카테고리의 다른 글
[Java] 연산자(Operator) - 1.단항연산자 (0) | 2022.07.28 |
---|---|
[Java] 스캐너(Scanner) (0) | 2022.07.27 |
[Java] 실행 클래스 & 기능 클래스 (0) | 2022.07.27 |
[Java] 변수(Variable) (0) | 2022.07.27 |
[Java] String 클래스에서 사용가능한 유용한 메소드 : charAt () concat() equals() substring() replace() (0) | 2022.02.24 |