프리미티브 타입 종류와 값의 범위 그리고 기본 값
자바의 기본타입
자료형 | 범위 | 기본값 | 크기 |
byte | -128 ~ 127 | 0 | 1바이트 |
short | -32,768 ~ 32,767 | 0 | 2바이트 |
int | -2,147,483,648 ~ 2,147,483,647 | 0 | 4바이트 |
long | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 | 0L | 8바이트 |
float | 32비트 부동 소수점(IEEE 754) 지원 | 0.0F | 4바이트 |
double | 64비트 부동 소수점(IEEE 754) 지원 | 0.0 | 8바이트 |
boolean | true, false | '\u0000' | 1비트 |
char | 유니코드 문자 | false | 2바이트 |
docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
프리미티브 타입과 레퍼런스 타입
primitive type은 '값'형이다. stack 메모리의 실제 값을 가리킨다,
reference type은 객체의 주소를 참조하는 타입들을 말한다.
레퍼런스 타입의 디폴트 값은 null 이다.
레퍼런스 타입의 종류
- class type
- array type
- interface type
www.tutorialspoint.com/What-are-reference-data-types-in-Java
리터럴
변수나 상수에 저장되는 값 그 자체를 말한다.
1
2
3
4
5
|
boolean result = true;
char capitalC = 'C';
byte b = 100;
short s = 10000;
int i = 100000;
|
cs |
docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
정수 리터럴
int intNum = 123;
long longNum1 = 123L;
long longNum2 = 123l;
long longNum3 = 29384982398342349820934; // 컴파일 에러
int리터럴은 없음
long 의 리터럴 L, l (int 범위보다 큰 수 일때 생략시 오류 발생)
l의 경우 1과 헷갈리는 가독성의 문제로 L를 추천함
- 16진수 리터럴 : 0x
- 2진수 리터럴: 0b
- 8진수 리터럴 : 0
부동 소수점 리터럴
double num1 = 123.12;
double num2 = 123.12d;
double num3 = 123.12D;
float num4 = 123.0F;
float num5 = 123.0f;
- float 리터럴 : F, f
- dobule 리터럴 : D, d (보통 생략)
문자, 문자열 리터럴
char ch = 'a';
String hello = "World";
String uni = "\u03b2";
String hello2 = "Hello\nWorld";
- 문자 리터럴 : 작은 따옴표
- 문자열 리터럴 : 큰 따옴표
- 유니코드 : \unnn
- 이스케이프 문자: \ 로 시작 ( \t, \n, \b \\ .... )
- 기타 리터럴
- null : 참조형에 사용
- _ : 가독성을 위해 java7부터 사용 ( ex) 100_000)
변수 선언 및 초기화하는 방법
변수를 선언하는 것은 stack 영역에 메모리를 할당하는 것을 말합니다
변수를 먼저 선언하고 나중에 초기화를 하는 방법
타입 변수이름;
1
2
3
4
5
|
public static void main( String[] args) {
int a1;
a1 = 2; // 초기화
System.out.println(a1);
}
|
cs |
초기화를 하지않으면 컴파일 오류가 발생
선언과 동시에 초기화를 하는 방법
타입 변수이름 = 초기값;
타입 변수이름 = 초기값, 타입 변수이름 = 초기값;
1
2
3
4
|
public static void main( String[] args) {
int b = 3;
boolean studyHard = true, studyExit = false;
}
|
cs |
하지만 여러 변수를 동시에 초기화 할 수 선언할 수 없음
1
2
3
4
|
public static void main( String[] args) {
int a, b;
a = 1, b= 2; // 컴파일에러
}
|
cs |
변수의 스코프와 라이프타임
종류 | 스코프 | 라이프타임 |
Instance 변수 | static method를 제외한 모든 클래스 영역 | 객체가 메모리에 존재하는 동안 |
Class 변수 | 모든 클래스 영역 | 프로그램이 종료시 |
지역 변수 | 블록이 선언된 내부 | 블록 내부를 컨트롤 하는 동안 |
www.learningjournal.guru/article/programming-in-java/scope-and-lifetime-of-a-variable/
타입 변환, 캐스팅 그리고 타입 프로모션
타입변환
기존의 타입에서 다른 타입으로 변경하는 것
큰범위로의 캐스팅, 좁은 범위로의 캐스팅이 있다.
큰 범위로 캐스팅 (자동으로 캐스팅)
byte->short->char->int->long->float->double
1
2
3
4
5
6
7
|
public static void main( String[] args) {
int num = 10;
double castNum = num; // 자동으로 캐스팅된다
System.out.println(num); // 10
System.out.println(castNum); // 10.0
}
|
cs |
작은 범위로의 캐스팅 : 데이터 손실이 있기때문에 직접(explicit) 선언을 해야합니다.
double -> float -> long -> int -> char -> short -> byte
1
2
3
4
5
6
7
|
public static void main( String[] args) {
double doubleNum = 10.5;
int intNum = (int) doubleNum; // Manual casting: double to int
System.out.println(doubleNum); // 10.5
System.out.println(intNum); // 10
}
|
cs |
참고 : www.w3schools.com/java/java_type_casting.asp
타입 프로모션은
연산시에 타입이 같지 않을때 타입을 큰 범위로 자동으로 캐스팅하는 것을 말한다.
promote 규칙
char->int
byte->short->int->long->float->double
1
2
3
4
5
|
public static void main( String[] args) {
char c = 'b'; // c의 int로 promote
int a = 50;
System.out.println(a + c); // 148
}
|
cs |
www.java2s.com/Tutorials/Java/Data_Types/What_is_Java_type_promotion.htm
1차 및 2차 배열 선언하기
1차원 배열의 선언
타입 변수명[];
타입[] 변수명;
2차원 배열의 선언
타입 변수명[][];
타입[][] 변수명;
타입 추론, var
Java 10부터 지원
컴파일러가 자료형을 추론(type reference)
선언과 동시에 값을 대입
1
2
3
4
5
6
7
8
|
public class Main {
public static void main( String[] args) {
var hello = "world";
var hi; // 컴파일 에러
}
}
|
cs |
var는 변수 이름에 []를 사용할 수 없다.
선언과 동시에 {}에 값 대입을 이용할 수 없다
github.com/whiteship/live-study/issues/2
'JAVA' 카테고리의 다른 글
제어문 (0) | 2020.12.05 |
---|---|
연산자 (0) | 2020.11.22 |
JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가 (0) | 2020.11.17 |
Interface default methods (0) | 2020.10.19 |
Java8 Function (0) | 2020.10.18 |