JAVA 자료형
기본자료형은 8개, 최소단위는 byte(256: -128 ~ 0 ~ 127)
기본자료형은 크게 숫자로 볼수있다.
(문자 char 는 아스키코드로 숫자로 치환 가능)
정수는 int가 기본
실수는 double이 기본
문자는 2byte(한글을 표현하기 위해)
문자열은 자료형이 아닌 class 이다. (배열이라고 할수 있음)
※표 암기!(표현범위 제외)※
자료형 | 키워드 | 크기(byte) | 기본값 | 표현범위 |
논리 | boolean | 1 | false | false, true |
문자 | char | 2 | \u0000 (공백) | 0 ~ 65,535 |
정수 | byte | 1 | 0 | -128 ~ 0 ~ 127 |
short | 2 | 0 | -32,768 ~ 32,767 | |
int | 4 | 0 | -2,147,483,648 ~ 2,147,483,647 | |
long | 8 | 0 |
-9,223,372,036,854,775,808
~ 9,223,372,036,854,775,807
|
|
실수 | float | 4 | 0.0f | -3.4E38 ~ +3.4E38 |
double | 8 | 0.0 | -1.7E308 ~ +1.7E308 |
기타:
스위프트는 int만 사용한다.
(int8 int32 이런식으로 byte크기를 지정해서 사용한다.)
c#의 int는 8byte
현재 우리가 사용하는 컴퓨터는 64비트 운영체제
80년대 초반부에는 8비트로 시작했고,
윈도우즈95 16비트 (이때의 int가 현재의 short)
2000년대 32비트 (현재의 int가 int, 과거의 int가 short)
그 이후 덩치를 늘릴 필요가 없다고 생각해서 int를 기본으로 사용.
64비트에서 변수 short(2byte)가 들어오면 64비트 컨테이너를 16비트만 사용한다.
long일때는 64비트 모두 사용한다.
배열은 64비트로 담기지 않아서 주소체계를 사용한다.
정수
byte, short, int, long
var a = 10;
java버전이 17이여서 변수var가 사용됨 => 실무에서는 사용x
byte a = 10; //변수 선언 및 초기화
//a = 123.456;
자료형과 대입값이 일치해야한다.
//a = true;
java는 1,0으로 true false를 구분하지 못한다.
//a = "문어회"
문자열은 당연히 안됨
a = 'a'; //값: 97
아스키코드로 인식해 숫자로 값이 대입된다.
a = 127;
//a = 128;
byte는 -128~127까지이기 때문에 안됨.
short s = 20;
int i = 30;
i = 2147483647;
//i = 2147483648; 안됨
long lo = 40;
lo = 2147483647;
lo = 2147483648L;
정수는 int가 기본이여서 int값 이상인 자료형 long을 입력하려면 숫자 뒤에 'L'을 입력해야 한다.
실수
float, double
double dd = 123.456;
dd = 1234;
float ff = 123.456f;
실수는 double이 기본이여서 float은 숫자 뒤에 'f'를 입력해야 한다.
논리
boolean 기본값 false
boolean bo = true;
//bo = "true"; 문자열
//bo = 0; 숫자
bo = false;
문자열이나 숫자를 논리형에 대입할 수 없다.
문자
char
char ch = 'a';
//ch = "아";
쌍따옴표 사용 안됨
ch = 100;
아스키코드로 받아들임
문자열
String
문자열 String 기본자료형이 아니고 class임
class인 증거? => String 앞글자를 대문자로 입력해야함.
String str = "나는 문자열";
형변환
up casting / down casting
up casting
|
= 묵시적 형변환
|
= 자동 형변환
|
그냥 형변환 해도 문제 없음.
|
down casting
|
= 명시적 형변환
|
= 강제 형변환
|
형변환할 자료형을 정확히 지정해야함
|
up casting
묵시적 / 자동
정수 → 정수
byte를 short에 대입
a = 100; //byte
s = a; //short <= byte
결과 => a:100, s:100
정수 → 실수
int를 double에 대입
i = 1234;
dd = i; //double <= int
결과 => i:1234, dd:1234.0
문자 → 정수
ch = 's';
i = ch;
결과 => ch:s, i:115 (아스키코드)
down casting
명시적 / 강제
정수 → 정수
short를 byte에 대입
s = 50;
a = (byte)s; //byte <= short
결과 => s:50 a:50
s = 130;
a = (byte)s; //byte <= short
결과 => s:130 a:-126
(short) 130 => 0000 0000 1000 0010
(byte) -126 => 1000 0010
over되는 값이 짤리고 나머지 값을 보여줌
표현 범위가 2byte에서 1byte로 줄어들면서 byte기준 2진수의 맨 왼쪽의 숫자가 1이됨 (0:양수, 1:음수)
byte는 -128(음수) ~ 0 ~ 127(양수) 까지 표현가능
s = 254;
a = (byte)s; //byte <= short
결과 => s:254 a:-2
+ 추가
(short) 256 => 0000 0001 0000 0000
(short) 512 => 0000 0010 0000 0000
(short) 1,024 => 0000 0100 0000 0000
(byte) 0 => 0000 0000
실수 → 정수
실수에서 정수로 가면 소수점은 잘라버린다.
dd = 123.456;
i = (int)dd; //int <= double
결과 => dd:123.456, i:123
정수 → 문자 (문자 → 정수 : up casting)
char: 2byte, int: 4byte
i = 100;
ch = (char)ch;
결과 => i:100, ch:d (아스키코드)
인코딩 에러 이유
bit byte
BCD ASCII EBCDIC
1 2 3 4 5 6 7 8
2 4 8 16 32 64 128 256
-----------------------------------------------------------------------
0(off) 00 000 a~z 26 62 + 128 + 부호(0:양수)
1(on) 01 001 A~Z 26 특수문자 33 (1:음수)
10 010 0~9 10 제어문자 33
11 011 ------ ------
100 62 128
101
110
111
BCD 2진화 10진법
ASCII 아스키코드
[정보통신기술용어해설]
ㅇ 한편, 8번째 비트는,
- 에러 검출 방식으로 사용되거나,
- 때론, 비 영어권에서 문자 표현 확대를 위해 사용하기도 함
자료 | 1byte 정보(데이터)
한글은 2byte로 표현하는데, 데이터 전송시 나뉘어서 전송되고 인코딩으로 결합하는 것임.
이때 잘못 결합되면 오류. 이 오류를 컴퍼팅(변수를 이용해서로)으로 고칠 수있는데,
변수명이 한글이면 컴퍼팅도 못함………
현재는 기본 UTF-8 파일로 되어있다
응용소프트웨어 byte
네트워크 암호 bit
자바스크립트 calc