
| 이름 | 크기 | 값 범위 | 기본 값 | 비고 |
|---|---|---|---|---|
| byte | 1 byte | -128 ~ 127 | 0 | |
| short | 2 byte | -32,768 ~ 32,768 | 0 | |
| signed int | 4 byte | ~ | 0 | |
| unsigned int | 4 byte | 0 ~ | 0 | java 8 이상부터 |
| signed long | 8 byte | ~ | 0L | |
| unsigned long | 8 byte | 0 ~ | 0L | java 8 이상부터 |
| float | 4 byte | single-precision 32-bit | 0.0f | |
| double | 8 byte | double-precision 64-bit | 0.0d | |
| boolean | 1 byte | true / false | false | |
| char | 2 byte | '\u0000' ~ '\uffff' | \u0000 |
| 타입 | 예시 | 기본값 | 할당되는 메모리 크기 |
|---|---|---|---|
| Array | int[] arr = new int[5]; | Null | 4 byte (객체의 주소값) |
| Enumeration(열거) | Null | 4 byte (객체의 주소값) | |
| Class | Pepsi zero = new Pepsi(); | Null | 4 byte (객체의 주소값) |
| String type | String str = "pepsi"; | Null | 4 byte (객체의 주소값) |
| Interface | Null | 4 byte (객체의 주소값) |
10진수, 8진수, 16진수, 2진수 리터럴
int a = 15;
int b = 015;
int c = 0x15;
int d = 0b0101;
각각의 선언에 대한 리터럴은 다움과 같다.
정수 리터럴은 int형으로 컴파일 되며, long 타입 리터럴은 숫자 뒤에 L또는 l을 붙여서 표시한다.
long e = 26L;
소수점 형태나 지수 형태로 표현한 값을 의미한다.
실수 타입 리터럴은 float이나 double 타입으로 컴파일 된다.
double f = 0.1234;
double g = 1234E-4;
숫자 뒤에 f나 d를 명시적으로 붙이기도 한다.
(float 같은 경우에는 f를 꼭 붙여줘야하며, double은 생략 가능하다.)
문자 리터럴은 단일 인용부호(")로 문자를 표현한다.
char a = 'H';
char b = "한";
char c = \uae00; // 유니코드값
// \u 다음에 4자리 16진수로, 2바이트의 유니코드
| 특수문자 리터럴 | 용도 | 유니코드 |
|---|---|---|
| \t | 수평 탭 | 0x0009 |
| \n | 줄바꿈 | 0x000a |
| \r | 리턴 | 0x000d |
| \\" | " 큰 따옴표 표시 | 0x0022 |
| \\' | ' 작은 따옴표 표시 | 0x0027 |
| \ \ | \ 역슬래쉬 표시 | 0x005c |
| \u16진수 | 16진수에 해당하는 유니코드 | 0x0000 ~ 0xffff |
문자열은 기본타입이 아니며, 큰 따옴표("")로 문자열을 표현한다.
String Iter = "JAVA";
boolean 타입 변수에 치환하거나 조건문에 이용된다.
boolean a = true;
boolean b = 10 > 0; // b는 true로 저장
boolean c = 0; // C언어와 다르게 boolean타입으로 1, 0을 참, 거짓으로 사용 불가
null 리터럴은 Reference type에 대입하여 사용한다.
int a = null; // 에러
String str = null; // 가능
class A{
public int a;
}
class Hello{
public static void main(String[] args){
A a = new A(); // 클래스 선언
// 정수 리터럴의 _ 은 숫자를 구별하기 위해 사용할 수 있게 지원해준다.
// 100_000 = 100,000
// 맨 앞이나 뒤에 _ 를 작성할 경우 컴파일 에러가 발생한다.
byte variableB = 100;
short variableS = 30_000;
int variableI = 100_000; // 10진수
int variableI = 010; // 8진수, 8
int variableI = 0xa; // 16진수, 10
int variableI = 0b11; // 2진수, 3
long variableL = 100_000_000_000; // 혹은 100_000_000_000l;
float variableF = 3.14f;
double variableD = 3.14; // 3.14D; 기본적으로 Double 로 판단하여 선언해준다.
char variableC = 'c';
boolean bool = true;
}
}
변수의 스코프란 해당 변수를 사용할 수 있는 영역범위를 뜻한다.
라이프타임은 해당 변수가 메모리에서 언제까지 살아있는지를 의미한다.
선언하는 위치(Scope)에 따라 Instance Variables, Class Variables, Local Variables로 나눈다.
int value = 10;
long value2 = value;
long value = 10;
int value2 = value;
class ArrayExample{
public static void main(String[] args){
//1차원 배열
int[] oneDimensionArrayEx1 = {1, 2, 3, 4, 5};
int[] oneDimensionArrayEx2 = new int[10];
//2차원 배열
int[][] twoDimensionArrayEx1 = {1, 2}, {3, 4};
int[][] twoDimensionArrayEx2 = new int[10][10];
}
}


String message = "data"; // Java 9 이하
var message = "the initializer"; // Java 10 이상
public class Test {
Pair<Integer, String> p1 = new Pair<>(1, "apple");
Pair<Integer, String> p2 = new Pair<>(2, "pear");
boolean same1 = Util.<Integer, String>compare(p1, p2);
// <Integer, String> 은 없어도 되는 코드이다.
Pair<Integer, String> p3 = new Pair<>(1, "apple");
Pair<Integer, String> p4 = new Pair<>(2, "pear");
boolean same2 = Util.compare(p3, p4);
// 간결해진 코드
}
class Util {
public static <K, V> boolean compare(Pair<K, V> p1, Pair<K, V> p2) {
return p1.getKey().equals(p2.getKey()) &&
p1.getValue().equals(p2.getValue());
}
}
class Pair<K, V> {
private K key;
private V value;
public Pair(K key, V value) {
this.key = key;
this.value = value;
}
public void setKey(K key) { this.key = key; }
public void setValue(V value) { this.value = value; }
public K getKey() { return key; }
public V getValue() { return value; }
}