특징
- 미리 정해진 크기의 데이터 표현
- 변수 자체에 값
이 중 int
형과 double
형은 default
이다
int
와 같은 정수형 자료형은 overflow
를 조심해야 한다. (-21억 ~ 21억)
double
이나 float
와 같은 실수형 자료에서는 계산 시 조심해야한다.
ex)
import java.math.BigDecimal;
public class Lang_02 {
public static void main(String[] args) {
float f1 = 2.0f;
float f2 = 1.1f;
float f3 = f1 - f2;
System.out.println(f3);
double d1 = 2.0;
double d2 = 1.1;
double d3 = d1 - d2;
System.out.println(d3);
System.out.println(((int) (d1 * 100) - (int) (d2 * 100)) / 100.0);
BigDecimal b1 = new BigDecimal("2.0");
BigDecimal b2 = new BigDecimal("1.1");
System.out.println("BigDecimal을 이용한 빼기 : " + b1.subtract(b2));
}
}
위 두 연산에 대해서 결과 값을 알아보자
f3
는 0.9 / d3
는 0.899999...가 출력된다.
이러한 문제는 데이터를 저장하는 방법에 의해서 발생되는데 이를 방지하기 위해 최대한int형으로 계산
하는 것이 안전하다.
또는 bigDecimal
과 같은 class를 활용하는 것도 방법이다.
변수의 형을 다른 형으로 변환하는 것
기본형
은 기본형
끼리 참조형
은 참조형
끼리 형 변환이 가능하다.
기본형
과 참조형
의 형 변환을 위해 Wrapper
클래스를 사용한다.
형 변환은 명시적 형변환
과 묵시적 형변환
2가지가 있다.
명시적 형변환
- 형 변환 연산자(괄호) 사용
- 값의 손실이 발생 할 수 있음
int i = 300; byte b = (byte) i;
묵시적 형변환
- 값의 손실 걱정이 없음
byte b = 10; int i = (int)b //이건 명시적 형변환 int i2 = b; //byte형의 b의 값이 int형의 i2로 삽입 -> 묵시적 형변환
타입의 표현 범위
가 커지는 방향으로 묵시적 형변환 가능
오른쪽 방향 (->)으로 묵시적 형변환이 가능하고
왼쪽 방향 (<-)은 명시적 형변환을 해야함
public static void main(String[] args) {
// 1
byte b1 = 10;
byte b2 = 20;
byte b3 = b1 + b2;
// 2
int i1 = 10;
long l1 = 20;
int i2 = i1 + l1;
// 3
float f1 = 10.0;
float f2 = f1 + 20.0;
}
int b3 = b1 + b2
long i2 = i1 + l1
float f1 = 10.0f;
double f2 = f1 + 20.0;
- | 는 무조건 다 함
- ||는 앞에가 true이면 그만
=> short circuit연산자
만약 || 연산자 뒤에 연산자에 값을 변경하는 경우 앞에서 true이면 수행 X
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println((a > b) & (b > 0));
System.out.println((a += 10) > 15 | (b -= 10) > 15);
System.out.println("a = " + a + ", b = " + b);
a = 10;
b = 20;
System.out.println((a += 10) > 15 || (b -= 10) > 15);
System.out.println("a = " + a + ", b = " + b);
}
switch에 들어갈 수 있는 자료형 :
정수형 자료형 (int, long, char ...) + String 등
boolean이나 실수형 자료형(double, float)은 안된다.