기본형과 참조형으로 나뉘어진다.
기본형은 총 8개다 : byte
, short
, int
, long
, float
, double
, char
, boolean
나머지는 전부 참조형이며, class의 이름을 활용해 선언된다.
기본형의 타입은 선언시 사용한 이름이다.
참조형의 타입은 선언시 사용된 class의 이름이다.
기본형은 값 자체가 저장되어 있다.
참조형은 주소값이나 null
이 저장되어 있다.
주소값은 JVM이 32bit 기반이면 4byte, 64bit 기반이면 8byte다.
final
을 사용해서 선언. final int MAX_BUDGET = 5000;
final int BASE_WIDTH = 20;
final int BASE_HEIGHT = 10;
int newFieldArea = BASE_WIDTH * BASE_HEIGHT;
constant
라고 부르지만 Java에선 앞에 소개한 의미로 이미 쓰여서 이 이름을 가지게 됨.long
인 literal을 만들거면 L
/l
을 숫자 뒤에 붙인다. long i = 1L;
float
냐 double
이냐에 따라 접미사 f
나 d
를 숫자 뒤에 붙인다. float i = 1.0f;
double j = 1.0d;
0b
, 0
, 0x
/0X
을 숫자 앞에 붙이면 된다.int octNum = 010; // 8
int hexNum = 0x10; //16
int binNum = 0b10; //2
_
을 넣어 숫자 구별을 할 수 있도록 해준다.long a = 100_000_000; //100000000
접미사가 없는 정수는 int
literal, 접미사가 없는 실수는 double
literal로 취급한다.
단 byte
, short
literal을 위한 접미사는 없어서, int
literal을 사용한다.
short a = 1; //OK
byte b = 2; //OK
byte c = 384; //Overflow(Gives Error)
e
를 활용double a = 3.0e8;
p
를 쓰면 된다. 이때 p
는 2의 제곱을 나타낸다는 점 참고.double 0x0.2p-1; //0.0625
기본적으로 변수 타입이랑 같은 타입의 literal을 저장해야 한다.
단, 숫자의 경우 변수의 타입보다 작은 범위를 나타내는 타입의 literal이 들어가는 것은 상관이 없다.
double d = 3.14f; //OK
float f = 3.14d; //Error
'
로, 문자열은 "
로 감싼다.char a = 'J';
String b = "Jet";
char a = ''; //error
String b = ""; //OK
char a = 'ab'; //error
문자열은 사실 클래스다. 이 때문에 실제로 위의 String b
의 경우 사실 참조형 변수다. 참조형은 주소값으로 초기화가 되어야 하지만 String
은 특별히 위와 같이 할당하는 것도 허용해준다는 점 참고.
문자열끼리 덧셈시 둘을 concatenate한다.
String anme = "My" + "Love"; //MyLove
덧셈의 피연산자 중 하나만 String
인 경우, 다른 하나를 String
으로 변환 후 더한다. 나오는 결과도 String
이다.
숫자와 문자열을 더할 경우 숫자의 십진법상 표기가 그대로 String
으로 변환되고 더해진다. e
나 8, 16진법 등은 다 10진법에 맞게 변환되고 String
으로 변환된다.
String a = 10e1 + "hi"; //10hi
boolean
과 문자열을 더할 경우 true
였으면 "true"
와 같은 형태로 변환. 참조형의 경우 주소값 자체가 String
이 되며 null
은 "null"
이 된다.String a = true + "hi"; //truehi
Java의 char
은 C와 다르게 16bit이며, 기본적으로 숫자 취급이 아니라는 점에 유의하자. 참고로 Java의 byte
는 C의 char
처럼 8bit이면서 숫자로 표현이 되지만, C랑 다르게 문자로 취급이 안된다.
Java의 char
이 16bit인 이유는 유니코드 전체를 저장할 수 있도록 하기 위해서다.
Java의 char
은 숫자로 변환이 가능하지만, C의 unsigned short
랑 같은 범위를 가진다. C의 short
랑 같은 범위를 가지는 Java의 숫자 type은 short
이다.
char
간의 덧셈은 정수간의 덧셈으로 취급된다.
System.out.println('A'+'B'); //131
char
과 정수간의 덧셈은 정수간의 덧셈으로 취급된다.System.out.println('1' + 2); //51
char
과 String
간의 덧셈은 String
간의 덧셈으로 취급된다. char
이 문자가 하나인 String
으로 취급된다.System.out.println('I' + " love C?"); //I love C