1. 컴퓨터 값 처리 원칙
- 같은 자료형 끼리만 연산이 가능하고 결과도 같은 자료형만 반환된다
<형변환(Casting)>
데이터의 자료형을 변환
<자동 형변환>
값의 범위가 서로 다른 값들의 연산 시 "컴파일러"가 자동으로 범위가 작은 값을 큰 값의 자료형으로 변환
<강제 형변환>
- 값의 범위가 큰 자료형 -> 작은 자료형으로 변환
(데이터 손실을 고려해야 함)
- 의도적으로 자료형을 변환할 때
[작성법]
(자료형)변수명 ;
or
(자료형)값;
- 변수명 / 값이 지정된 자료형을 변환
# 예제1
package ex;
public class VariableEx2 {
public static void main(String[] args) {
System.out.println("[자동 형변환 예시]");
int num1a = 12;
double num1b = 1.3;
// 1) 다른 자료형 끼리 연산
// 12 + 1.3 => 12.0 + 1.3 => 13.3
System.out.println(num1a + num1b);
// 2) 같은 자료형 끼리 연산
// (컴퓨터 값처리 원칙과 연관성이 깊은)
int num2a = 3;
int num2b = 2;
// (int)3/ (int)2 => (double)1.5 => (int)1
System.out.println(num2a / num2b); // 3/2 ==
// 3) 여러 자료형 연산
int num3a = 999;
long num3b = 10000000000L;
// 999+ 100000000L
// -> 999L + 100000000L = 10000000099L (long)
// double result3 = 100000000999L (long)
// -> double result3 = 100000000999.0; (double)
double result3 = num3a + num3b;
System.out.println(result3); //1.0000000999E10(부동 소수점)
//-------------------------------------------------------------------
/* [자동 형변환이 되지 않는 경우]
* 값의 범위가 더 큰 자료형을
* 값의 범위가 더 작은 변수에 대입 불가
*
*-> 억지로 대입하려면 "강제 형변환"을 이용
*/
int a = 100;
double b = 23.4;
// int result = a + b; // a+b = 100.0 + 23.4
// = 123.4(double)
]
]
#결과

#예제2
System.out.println("[강제 형변환 데이터 손실 확인 1]");
int num1 = 290;
byte result1 = (byte)num1; // byte 강제 형변환
System.out.println("num1 : " + num1); // 290
System.out.println("result1 : " + result1); //34
#결과

#예제3
System.out.println("[강제 형변환 데이터 손실 확인 2]");
// 실수를 정수로 강제 형변환
// -> 소수점 버림
// -> 실수를 정수로 변환
// -> 정수 부분만 확인 (손실 활용)
double num2 = 123.456789;
int result2 = (int)num2; // int 강제 형변환
System.out.println("num2 : " + num2);
System.out.println("result2 : " + result2);
// (자동 형변환)
System.out.println(num2 - result2); // 0.456789
// -> 0.45678900000000056 (2진수 소수 표현 시 문제점)
/* 난수 + 강제 형변환 */
// 난수 : Math.random()
// 범위 : 0.0 <= x < 1.0
// 자료형 : double
// 1~ 10 사이 난수(정수)
// -> 강제 형변환을 이용해 소수점 제거
int randomNumber = (int)(Math.random() * 10 + 1);
System.out.println("randomNumber : " + randomNumber);
#결과

#예제4
System.out.println("[의도적으로 강제 형변환]");
System.out.println(123); // 123
System.out.println((double)123); //123.0
#결과

#예제5
System.out.println("[문자(char) <-> 유니코드(int)]");
System.out.println("A의 번호 : " + (int)'A'); // 65
System.out.println("a의 번호 : " + (int)'a'); //97
System.out.println("정 번호 : " + (int)'정'); // 51221
System.out.println("호 번호 : " + (int)'호'); // 54840
System.out.println("정 번호 : " + (int)'정'); // 51221
System.out.println("ㄱ 번호 : " + (int)'ㄱ'); // 12593
System.out.println("ㄱ 다음은? : " + (char)('ㄱ'+1)); // ㄲ
System.out.println("ㄱ + 2은? : " + (char)('ㄱ'+2)); // ㄳ
System.out.println("ㄱ + 3은? : " + (char)('ㄱ'+3)); // ㄴ
#결과

#예제6
System.out.println("[오버 플로우]");
// 오버 플로우 (overflow)
// - 연산 결과가 자료형의 값의 범위를 초과(+)한 경우
// int 자료형 최대 범위 초과
int max = Integer.MAX_VALUE; // int 최대값
System.out.println("max : " + max); // 2147483647
System.out.println("max +1 : " + (max + 1)); // -2147483648
#결과

#값 대입 불가한 경우
final double PI = 3.141592;
final int NATIONAL_CODE = 82;
//NATIONAL_CODE = 11; // 오류 발생 (값 대입 불가)
[상수]
- 한 번 값을 대입하면 바꿀 수 없는 변수
[작성법]
final 자료형 변수명 = 값;
→ 변수명은 대문자 + _ 형식으로 작성
'BackEnd > Java' 카테고리의 다른 글
| [Java]Control 조건문(Condition) (0) | 2024.07.21 |
|---|---|
| [Java]Operator (0) | 2024.07.21 |
| [JAVA]01_변수 실전예제1 (0) | 2024.07.20 |
| [JAVA]변수 Scanner (1) | 2024.07.20 |
| [JAVA]변수 Print (1) | 2024.07.18 |