일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Oracle SQL Developer
- java접근제어자
- 자바연산자
- C#접근제한자
- 빅오표기법
- sql
- break
- mvc디자인패턴
- 데이터베이스
- 오라클
- O(n)
- DATABASE
- C언어 표준 라이브러리
- 접근제한자
- DTO
- DEFAULT
- oracle db
- 자바
- DB 제약조건
- oracle developer
- DB
- 메이븐업데이트
- C#접근제어자
- Vo
- Oracle
- o(log n)
- java
- JavaSwing
- DAO
- JSP
성장일기 : 문과생의 개발 여정 (งᐖ)ว ( ᐛ )و
JAVA - 변수 타입 캐스팅 / Type Casting 본문
#타입 캐스팅 _ 0906 수업기록
* 자동 타입 캐스팅과 강제 타입 캐스팅이 있다.
* 데이터 또는 변수 앞에 (타입)을 적으면 타입이 강제로 변한다.
1> 자동타입캐스팅 : 명시하지 않아도 타입이 자동으로 변한다.
- 작은 타입에서 큰 타입으로 변하는 경우
- 특별히 문제가 발생하지 않는 경우
- 값이 손상될 우려가 없는 자연스러운 경우
2> 강제타입캐스팅 : 데이터 타입을 강제로 변환하는 것
- 큰 타입의 값을 작은 타입에 억지로 넣어야 하는 경우
- 그 외 타입이 변했을 때 특정 기능이 손실되는 경우
- 값이 손상될 우려가 있음을 프로그래머에게 에러로 알려야 하는 경우
# 타입의 크기순서
byte(1바이트) < short, char(2) < int(4) < long(8) < float(4) < double(8)
=> int 와 long 사이에 float 없는 이유
- 소수와 정수로 비교했을 때 소수-> 정수로 갈 때 소수점 아래 분실하기 때문에 더 큰 쪽에 있는 것이다.
* 작은 타입의 값을 큰 타입 변수에 넣을 때는 문제가 발생하지 않는다.
* 큰 타입의 값을 작은 타입 변수에 넣을 때는 에러가 발생한다.
>> int 타입을 short타입에 넣을 수 없어라고 에러메시지
>> 오버플로우 날 수 있음을 인지하고 그래도 작은 타입으로 변환시킬 거야라고 할 때
short s = ( byte )a; >> byte라고 수업 때 들었는데, 이 부분은 short타입을 써도 되지 않는가..?
byte와 short타입 다 넣어서 sysout 해보니 값은 동일하게 나왔다.
byte b2 = (byte)i2;
↓↑ long 은 8바이트, float는 4바이트 이지만, 소수를 더 큰 것으로 간주한다.
따라서 int는 타입캐스팅 해야 하지만, float는 하지 않아도 된다.
short 와 char는 모두 2byte 이지만, 서로 값을 넣을 때 강제 타입 캐스팅이 필요하다.
↓
>> short는 음수값이 존재할 위엄이 있음으로 확인(강제 타입캐스팅)이 필요하다.
>> char에서 shotr로 갈 때도 32767보다 큰 양수가 포함되어 있을 가능성이 있으므로 강제타입캐스팅을 통한 확인이 필요하다.
왜냐면, char은 0~65535 까지의 값을 표현할 수 있고 short는 -32,768~32,767 값을 표현할 수 있기 때문에 서로서로 타입 캐스팅 필요.
타입 캐스팅 중간 단계를 빼고 진행한 경우,
변수 선언 하고 하지 않는 것이라 이후에 사용 못하는 것, 다시 선언하거나 또 중간 단계 생략 해서 하거나 해야 해서 비효율적일 수 있다.
중간단계::::
char c = (char)value;
System.out.println(c);
++> 2의 보수, 부호비트
메모리상
컴퓨터는 맨 앞의 자리를 부호로 인식한다.
ㅁㅁㅁㅁㅁㅁㅁㅁ ㅁㅁㅁㅁㅁㅁㅁㅁ ㅁㅁㅁㅁㅁㅁㅁㅁ 10000010 -> int i2
00000000 00000000 00000000 10000010 >> (130 이진법)
....
ㅁㅁㅁㅁㅁㅁㅁㅁ -> byte b2
10000010 >> i2를 b2에 넣었을 때
컴퓨터는 1000 0010 = 1111 1010 +1 로 계산한다.
즉, 부호비트가 1일 때 나머지 값의 2의 보수를 음수 값이라고 생각한다.
부호비트가 0일 때 나머지 값을 양수 값이라고 생각한다.
'백엔드개발 > JAVA' 카테고리의 다른 글
JAVA import & Scanner (0) | 2023.10.25 |
---|---|
JAVA METHOD / 메서드(함수들) (0) | 2023.10.25 |
JAVA - 변수 (0) | 2023.10.24 |
JAVA - Variable (변수) & Declare 변수의 선언 (0) | 2023.10.24 |
Java - Escape / 이스케이프 문자 정리 (0) | 2023.10.24 |