원시타입과 참조타입
- 값타입(원시타입) : byte, short, int, long, float, double, char, boolean
- 참조타입 : 그외 모든 배열, 객체 등등
원시타입은 스왑이 안된다
i = 5
j = i
i = 6
결과는 j = 5 이다
배열의 경우는 j = 6 이 나온다.
- 원시타입 경우에는 밑에 그림에서 Stack 쪽에 들어가게 된다.
- 참조타입의 경우에는 Heap메모리에 들어가게된다.
나중에 가면 Thread vs process 관련해서도 나오는 그림이니 어느정도 숙지해두는게 좋다.
관련 내용은 여기서 더 볼 수 있다. https://hellojosh.tistory.com/18
타입 | 크기 | 값의 범위 | 기본값 |
byte | 8비트 | -128 ~ 127 | 0 |
short | 16비트 | -32,768 ~ 32,767 | 0 |
int | 32비트 | -2,147,483,648 ~ 2,147,483,647 | 0 |
long | 64비트 | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 | 0L |
float | 32비트 | 1.4e-45 ~ 3.4e+38 | 0.0f |
double | 64비트 | 4.9e-324 ~ 1.8e+308 | 0.0d |
char | 16비트 | '\u0000' ~ '\uffff' | '\u0000' |
boolean | 1비트 | true 또는 false | false |
float, double은 부동소수점이기 때문에 소수점이 정확하지 않다. 정확한 소수점 사용시에 Big Decimal이나 소수점은 따로 관리하는 것도 방법이라고 생각한다.
Typesafe
자바는 typesafe하다
파이썬의 경우는 typesafe하지 않다
class, interface로 type을 정의할 수있다.
하지만 value타입을 따로 만들 수가 없다.
명시적 타입 변환 vs 암시적 타입변환
명시적 타입변환 : 타입캐스팅 필요
암시적 타입변환은 필요 없다.
보통 손실이 나지 않는다면 암시적 타입변환이 가능하다.
long 최대값이 int로 변환시 -1이 출력되는 이유는 0111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 long 값이 하위 32비트만 남으면서 1111 1111 1111 1111 1111 1111 1111 1111이 남게 되고 2의 보수로 처리해서 정수형 표현에서 -1이 나타나진다.
'Java > 기초' 카테고리의 다른 글
Java Class(String, StringBuffer, StringBuilder, Wrapper, Enum) (0) | 2024.07.28 |
---|---|
Java의 배열 (0) | 2024.07.28 |
Java에서의 메소드와 파라미터 (0) | 2024.07.28 |