종류 | 데이터형 | 크기 | 범위 |
---|---|---|---|
논리형 | boolean | 1byte | true / false |
문자형 | char | 2byte | '\u0000' ~ 'uFFFF' (16비트 유니코드 문자 데이터) |
정수형 | byte | 1byte | -128 ~ 127 |
short | 2byte | -32,768 ~ 32,767 | |
int | 4byte | -2,147,483,648 ~ 2,147,483,647( -21억 ~ + 21억) | |
long | 8byte | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807(-100경 ~ + 100경) | |
실수형 | float | 4byte | 1.4E-45 ~ 3.4028235E38 |
double | 8byte | 4.9E-324 ~ 1.7976931348623157E308 |
▶︎ 유니코드
자바는 모든 문자를 유니코드로 처리한다.
이는 국제표준규약으로 세계 모든 문자를 코드값으로 매핑한 것이다.
2byte = 16bit = 88bit = 256256 = 65,536개 → 의 정수에 문자들이 매핑됨
*UTF-8 은 유니코드의 대표적인 인코딩방법이다.
▶︎ 아스키코드
미국의표준부호로 영어권 문자들을 코드로 매핑한 것이다.
7bit = 128개 → 0~127의 정수에 문자들이 매핑됨
출처 : www.codechobo.com
byte b = 128; // 컴파일에러!
byte b = 127;
System.out.println(++b); // sout : -128 *최대값보다 커져서 최소값으로 돌아옴
변수(variable) : 하나의 값을 저장하기 위한 공간
상수(constant) : 한 번만 값을 저장할 수 있는 공간 *변경불가
리터럴(literal) : 그 자체로 값을 의미하는것 = 데이터 그 자체
논리형
boolean b = true;
문자형
char ch1 = 'A';
char ch2 = 65; // sout : A
char ch3 = '\u0041'; // sout : A *\u다음에 4자리 16진수로, 2바이트의 유니코드(Unicode)
char tab = '\t';
정수형
byte b = 127;
short s = 32767;
int i = 100;
int u = 1_000_000;
int bin = 0b1101; // 0b로 시작 = 2진수, sout : 13
int oct = 0100; // 0으로 시작 = 8진수, sout : 64
int hex = 0x100; // 0x로 시작 = 16진수, sout : 256
long l = 10000000000L; // int범위 이상입력후 L(=l)생략시 컴파일에러! *정수형의 기본형은 int
실수형
float f = 3.14f; // 소수점 입력후 f(=F)생략시 컴파일에러! *실수형의 기본형은 double
float f = 10; // sout : 10.0
float f = 3.14e3f; // sout : 3140.0
double d = 3.14d; // d(=D)생략가능
double d = 10.; // sout : 10.0
double d = .10; // sout : 0.1
double d = 1e1; // sout : 10.0
문자열
String str1 = new String("abc");
String str2 = "abc";
// 클래스영역
{
int iv; // 인스턴스변수
static int cv; // 클래스변수
// 메서드영역
{
int lv = 0 ; // 지역변수
}
}
ex. true(X), True(O)
_
와 $
만 허용자료형 | 기본값 |
---|---|
boolean | false |
char | '\u0000' |
byte | 0 |
short | 0 |
int | 0 |
long | 0 |
float | 0.0f |
double | 0.0d or 0.0 |
참조형 | null |
변수종류 | 선언위치 | 생성시기 | 메모리 해제 시기 |
---|---|---|---|
클래스변수(static변수) | 클래스영역 | 클래스가 메모리에 올라갈때 | |
(인스턴스 생성전 사용 가능) | 프로그램 종료시 | ||
인스턴스변수 | 클래스영역 | 인스턴스가 생성되었을 때 | 인스턴스 참조해제시 |
지역변수 | 클래스 영역 이외의 영역 | ||
(메서드, 생성자, 초기화 블럭 내부) | 변수 선언문이 수행되었을 때 | 메소드 종료시 |
클래스 변수는 모든 인스턴스가 공유한다.
public class TEST {
int iv = 0;
void im(){
iv = 8;
}
static void cm(){
iv = 7;// 컴파일 에러 발생!
// → 클래스메서드에서 인스턴스변수 사용불가, 클래스변수(static)로 변경해서 사용
im();// 컴파일 에러 발생! → 클래스메서드에서 인스턴스메서드 사용불가
}
}
출처 : www.codechobo.com
int i = 10;
long l = i;
⇒ 보다 작은 타입으로 변환시에는 묵시적인 타입변환이 일어난다.
long l = 10;
int i = (int) l;
// 값손실
long l = 10000000000l;
int i = (int) l; // sout : 1410065408
⇒ 보다 큰 타입으로 변환시에는 캐스팅을 명시적으로 해주어야 한다. 이때 값 손실을 유의해야한다.
//1차원 배열 선언방법
int[] arr = new int[1];
int[] arr2 = new int[]{10,20,30};
int[] arr3 = {10,20,30}
//2차원 배열 선언방법
int[][] arr = new int[2][3];
int[][] arr2 = new int[][]{{10,20,30},{10,20,30}};
int[][] arr3 = {{10,20,30}, {10,20,30}}
출처
자바의 정석
https://perfectacle.github.io/2016/12/31/Java-study-002day/
https://needjarvis.tistory.com/643
https://blog.naver.com/swoh1227/222149491648