- 기본 자료형과 참조 자료형으로 구분
- 기본 자료형과 참조 자료형의 값 저장 방식이 서로 다름
- 메모리 구조
클래스 영역 정적 영역 상수 영역 메서드 영역 |
스택 영역 | 힙 영역 |
스택영역 - 변수들이 저장되는 공간
힙 영역 - 객체들이 저장되는 공간
1. 기본 자료형과 참조 자료형의 차이
1) 자료형의 이름 규칙
-기본 자료형 : 소문자(int, long, double, float ,....)로 시작
- 참조 자료형 : 대문자(String, System,....)로 시작
2) 실제 데이터 값의 저장 위치
- 기본 자료형
- 스택 메모리에 생성된 공간에 실제 변숫값을 저장
- 참조 자료형
- 실제 데이터 값은 힙 메모리에 저장되고, 스택 메모리의 변수 공간에는 실제 변숫값이 저장된 힙 메모리의 위칫값을 저장
- 자바는 힙 메모리에 직접 접근할 수 없으므로 반드시 위칫값을 저장하고 있는 참조변수가 필요
2. 기본 자료형의 메모리 크기와 저장할 수 있는 값의 범위
자료형 | 자료의 크기 | 값의 범위 | |
부울 대수 | boolean | 1byte | true, false |
정수 | byte | 1byte | -2^7~2^7-1 |
short | 2byte | -2^15~2^15-1 | |
int | 4byte | -2^31~2^31-1 | |
long | 8byte | -2^63~2^63-1 | |
실수 | float | 4byte | +-(1.40*10^-45 ~3.40*10^38) |
double | 8byte | +-(4.94*10^-324 ~1.79*10^308) | |
문자(정수) | char | 2byte | 유니코드 문자(0~2^16-1) |
- 자료형의 크기가 클수록 저장하는 값의 범위도 넓어짐
- n개의 비트로 표현할 수 있는 정수 =2^n
- 정수는 음수,0,양수를 포함하므로 표현할 수 있는 전체 개수 중 반은 음수, 나머지 반은 0과 양수에 할당
- 실수자료형의 구성
구분 | 부호 비트 | 가수 비트 | 지수 비트 |
float(32bit) | 1 | 23 | 8 |
double(64bit) | 1 | 52 | 11 |
- 지수 : 표현할 수 있는 값의 범위에 미치는 요소
- 가수 : 값의 정밀도에 영향을 미치는 요소
- 부동소수점방식
- float와 double의 정밀도 비교
package sec02_primarydatatype.EX01_FloatVsDouble;
public class FloatVsDouble {
public static void main(String[]args) {
//float의 정밀도(대략 소수 7자리)
float f1 = 1.0000001f;
System.out.println(f1); //정상 출력
float f2 = 1.000000001f; //오차 발생
System.out.println(f2);
//double의 정밀도 (대략 소수 15자리)
double d1 = 1.000000000000001; //정상 출력
System.out.println(d1);
double d2 = 1.0000000000000001; //오차 발생
System.out.println(d2);
}
}
3. 부울대수 자료형 - boolean
- true(참)과 false(거짓)의 값만 저장할 수 있는 자료형
- 실제로 할당된 1byte(=8bit)가운데 상위 7bit는 사용하지 않음
4. 정수 자료형 -byte,short,int,long
- 항상 대입연산자를 중심(=)으로 양쪽의 자료형이 똑같아야 함
- long a= 3L : 정수 리터럴 뒤에 L(l)이 붙으면 Long으로 인식
cf.리터럴: 코드에 직접 작성한 값
- long a =3
-> 문법 오류 발생 no
-> 크기가 작은 자료형을 큰 자료형에 대입하면 컴파일러가 자동 타입 변환(type casting)을 수행하기 때문
-byte a =130
-> 문법 오류 발생 yes
-> 큰 자료형에서 작은 자료형으로의 변환은 자동으로 일어나지 않음
5. 실수 자료형 -float, double
- float 자료형의 정밀도는 소수점 7자리, double 자료형의 정밀도는 소수점 15자리
- float a=3.5F : 뒤에 F가 붙었으므로 float로 인식
- 부울대수, 정수, 실수 값의 저장 및 출력
public class PraimaryDataType1 {
public static void main(String[] args) {
//boolean:true/false
boolean bool1=true;
boolean bool2=false;
System.out.println(bool1);
System.out.println(bool2);
System.out.println();
//정수
byte value1 =10;
short value2 = -10;
int value3 = 100;
long value4 = -100L; //Long 자료형으로 인식
System.out.println(value1);
System.out.println(value2);
System.out.println(value3);
System.out.println(value4);
System.out.println();
//실수
float value5 =1.2F; //float 자료형으로 인식
double value6=-1.5;
double value7=5; //자동 타입 변환
System.out.println(value5);
System.out.println(value6);
System.out.println(value7);
}
}
6. 문자 자료형 -char
- char은 문자를 저장하는 자료형으로, 문자를 작은따옴표('')안에 표기
- 메모리는 문자를 기록할수 없다. 메모리는 2진수 값만 저장할 수 있는 공간
- 모든 문자를 특정 정숫값으로 바꿔 저장하는 것 -> 유니코드 표 사용
- char 자료형 변수에 문자 'A'를 다양한 형태로 저장
char a='A' //문자
char b=65; //10진수
char c=0b1000001; //2진수
char d=00101; //8진수
char e=0x0041; //16진수
char f='\u0041' //유니코드
'Java' 카테고리의 다른 글
3-1장 연산자의 종류 (0) | 2023.04.19 |
---|---|
2-4장 기본 자료형 간의 타입 변환 (0) | 2023.04.19 |
2-2장 이름짓기 (0) | 2023.04.15 |
2-1장 변수와 자료형 (0) | 2023.04.15 |
1-2 장 자바 프로그램의 기본구조 (0) | 2023.04.15 |