본문 바로가기

Java

2-3장 자료형의 종류

- 기본 자료형과 참조 자료형으로 구분

- 기본 자료형과 참조 자료형의 값 저장 방식이 서로 다름

- 메모리 구조 

클래스 영역
정적 영역
상수 영역
메서드 영역
스택 영역 힙 영역

  스택영역 - 변수들이 저장되는 공간

  힙 영역 - 객체들이 저장되는 공간

 

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