bit : 0과 1을 메모리에 저장하는 최소 기억 단위
byte = 8 bit
기본타입(primitive) : 정해진 메모리 사용 크기 (바이트크기)로 값을 저장
- 정수 타입
의 값 저장 가능(n : 메모리 사용 크기(bit 수)
ex. int 타입은 4byte( 32 bit) -> 메모리 사용크기: -2^31 ~ 2^31 - 1
1. 정수타입(byte, char, short, int, long)
(1) byte 타입 (1byte = 8bit 가짐)
- 색상 정보 및 파일 또는 이미지 등의 이진(바이너리) 데이터를 처리할 때 주로 사용됨
- -128 ~ 127 (n=7) (양수가 127인 이유 : 0 포함)
- 범위를 초과하는 값이 byte타입 변수에 저장될 경우 다음과 같은 컴파일 에러가 발생한다.
"Type mismatch : cannot convert from int to byte"
public class ByteExample {
public static void main(String[] args) {
// TODO Auto-generated method stub
byte var1 =-128;
byte var2 = -30;
byte var3 = 0;
byte var4 = 30;
byte var5 = 127;
//byte var6 =128 //컴파일 에러
System.out.println(var1);
System.out.println(var2);
System.out.println(var3);
System.out.println(var4);
System.out.println(var5);
}
}
- 만약 실행 중에 저장할 수 있는 값의 범위를 초과하면 최솟값부터 다시 시작함
다음 예제를 실행시키면 이를 확인할 수 있음
public class GarbageValueExample {
public static void main(String[] args) {
// TODO Auto-generated method stub
byte var1 = 125;
int var2 =125;
for (int i=0; i<5;i++) {
for (int j=0;j<5;j++) {
var1++;
var2++;
System.out.println("var1: "+var1+"\t"+"var2:"+var2);
}
}
}
}
(2) char 타입
자바는 모든 문자를 Unicode(유니코드)로 처리
유니코드 - 하나의 문자에 대해 하나의 코드값 부여
- 0~65535 범위의 2byte 크기를 가진 정수값
- 0~127 : 아스키(ASCII)문자 할당 , 44032~55203: 한글 11172자
- char 타입 변수에 작은 따옴표(')로 감싼 문자 대입 -> 해당 문자의 유니코드 저장
- char 타입 변수에 직접 유니코드 정수값 저장 가능
- 음수값 저장 X -> 0~65535(2^16개) 저장 O
public class CharExample {
public static void main(String[] args) {
char c1 = 'A'; //문자 직접 저장
char c2= 65; //10진수로 저장
char c3='\u0041'; //16진수로 저장
int uniCode = c1; //유니코드 얻기
System.out.println(c1);
System.out.println(c2);
System.out.println(c3);
System.out.println(uniCode);
}
}
문자열 저장 : String 타입 사용
String 변수이름 = "~~~";
- String : 기본타입X, 클래스 타입 O, String 변수 : 참조 변수
- 문자열을 String 변수에 대입 -> String 객체 생성 -> String 변수는 String 객체의 번지 참조
- 문자열이 변수에 직접 저장 X
cf) 다음과 같이 작음따옴표 두개를 연달아 붙이면
char c = '';
컴파일 에러("Invalid character constant")가 발생한다
solution 1. 작은 따옴표 사이에 공백 추가
solution 2. 큰 따옴표 사용 (큰따옴표는 공백이 없어도 에러 발생 X)
(3) short 타입 (2byte = 16bit 저장 가능)
(4) int 타입 (4byte = 32bit 저장가능)
- 자바에서는 정수연산을 4byte로 처리하기 때문에 변수를 byte타입, short 타입으로 선언해도 +연산시 int타입으로 변환된 후 연산되고 결과 또한 int 타입이 됨
- 변수에 어떤 진수로 입력하더라도 2진수로 변환되어 저장
public class IntExample {
public static void main(String[] args) {
int var1 = 10; //10진수로 저장
int var2 = 012; //8진수로 저장
int var3 = 0xA; //16진수로 저장
System.out.println(var1);
System.out.println(var2);
System.out.println(var3);
}
}
(5) long 타입 (8byte = 64 bit 저장 가능)
- 수치가 큰 데이터 다루는 프로그램에서 사용
- long 타입 변수 초기화 : 정수값 뒤에 l / L 붙임
- int 타입의 저장 범위를 넘는 큰 정수 : 'L' 붙여야 함 (소문자일 경우 에러 발생)
public class LongExample {
public static void main(String[] args) {
long var1 =10;
long var2= 20L;
//long var3 = 1000000000000; //컴파일에러
long var4 = 1000000000000L;
System.out.println(var1);
System.out.println(var2);
System.out.println(var4);
}
}
2. 실수타입( float, double)
float (4byte) double(8byte)
- floating-point (부동 소수점) 방식으로 저장됨
( + 부호, m 가수(mantissa) , n 지수(exponent) )
float
부호 (1 bit) | 지수 (8 bit) | 가수 (23 bit) |
double
부호 (1 bit) | 지수 (11 bit) | 가수 (52 bit) |
- float 보다 double 이 더 정밀한 값 저장 가능
- 자바는 실수 리터럴의 기본 타입을 double로 간주하기 때문에 float에 실수리터럴에 그냥 저장하게 되면 컴파일에러가 발생한다
(Type mismatch : cannot convert from double to float)
double var1 =3.14;
float var2 = 3.14; //컴파일 에러
float var3 = 3.14F;
실수 리터럴을 float타입 변수에 저장하려면 위 코드와 같이 F 나 f를 붙여야함
public class FloatDoubleExample {
public static void main(String[] args) {
//실수값 저장
double var1 =3.14;
//float var2 = 3.14; //컴파일 에러(Type mismatch)
float var3 = 3.14F;
//정밀도 테스트
double var4 = 0.1234567890123456789;
float var5 = 0.1234567890123456789F;
System.out.println("var1: "+var1);
System.out.println("var3: "+var3);
System.out.println("var4: "+var4);
System.out.println("var5: "+var5);
//e 사용하기
int var6 = 3000000;
double var7 = 3e6;
float var8 = 3e6F;
double var9 = 2e-3;
System.out.println("var6: "+var6);
System.out.println("var7: "+var7);
System.out.println("var8: "+var8);
System.out.println("var9: "+var9);
}
}
컴파일 해보면
var4 와 var5를 비교해보면 double타입이 float타입보다 두배이상 정밀하게 값이 저장됨을 확인 가능
3. 논리타입(boolean)
boolean(1byte = 8bit 저장가능)
- 두가지 상태값을 저장할 필요성이 있을 경우 사용 (주로 조건문, 제어문의 실행 흐름 변경에 사용)
public class BooleanExample {
public static void main(String[] args) {
boolean stop= true;
if(stop) System.out.println("중지합니다.");
else System.out.println("시작합니다.");
}
}
'Programming Language > Java' 카테고리의 다른 글
[JAVA] 연산자- 단항연산자 (0) | 2020.05.26 |
---|---|
[JAVA] 타입변환 (0) | 2020.05.25 |
[JAVA] 변수 (0) | 2020.05.21 |
[JAVA] 명령프롬프트에서 java 실행 (0) | 2020.05.21 |
[JAVA] 자바란 (0) | 2020.05.20 |