원래 12,123,3.14. 'A'와 같은 값들이 '상수'인데,
프로그래밍에서는 상수를 '값을 한 번 저장하면 변경할 수 없는 저장공간'
으로 정의하였기 때문에 이와 구분하기 위해 상수를 다른 이름으로 불러야만 했다.
그래서 상수 대신 리터럴이라는 용어를 사용한다. 많은 사람들이 리터럴을
어려워하는데, 리터럴은 단지 우리가 기존에 알고 있던 '상수'의 다른 이름일뿐이다.
변수에 타입이 있는 것처럼 맅처럴에도 타입이 있다.
변수의 타입은 저장될 '값의 타입(리터럴의 타입)'에 의해 결정되므로,
만일 리터럴에 타입이 없다면 변수의 타입도 필요없을 것이다.
종류 | 리터럴 | 접미사 |
---|---|---|
정수형 | 123 , 0b0101 , 077 , 0xfFF , 100L | L |
실수형 | 3.14 , 3.0e08 , 0x1.Op-1 , | f , d |
문자형 | 'A' , '1' , '\n' | 없음 |
문자열 | "ABC" , "123" , "true" | 없음 |
여기서 실수형의 접미사 'd'는 생략 가능하며
정수형과 실수형은 대소문자 구별 X
정수형과 실수형에서는 여러 타입이 존재하므로, 리터럴에 접미사를 붙여서
타입을 구분한다. 정수형의 경우 , LONG타입의 리터럴에 접미사 'l' 또는 'L'을 붙이고,
접미사가 없으면 int타입의 리터럴이다. byte와 short타입의 리터럴은 별도로 존재하지않으며 byte와 short타입의 변수에 값을 저장할 때는 int타입의 리터럴을 사용한다.
10진수 외에도 2,8,16진수로 표현된 리터럴을 변수에 저장할 수 있으며, 16진수라는 것을
표시하기 위해 리터럴 앞에 접두사 '0x'또는 '0X'FMF, 8진수의 경우에는 '0'을 붙인다.
- int octNum = 010; // 8진수 10 , 10진수로 8
- int hexNum = 0x10; // 16진수 10 , 10진수로 16
그리고 JDK1.7부터 정수형 리터럴의 중간에 구분자 '_' 를 넣을 수 있게 되어서
큰 숫자를 편하게 읽을 수 있게 되었다.
- long big = 100_000_000_000L; (long big = 100000000000L;)
- long hex = 0xFFFF_FFFF_FFFF_FFFFL; (long hex = 0xFFFFFFFFFFFFFFFL;)
실수형에서는 float타입의 리터럴에 접미사 'f'또는 'F'를 붙이고, double타입의 리터럴에는 접미사 'd' 또는 'D'를 붙인다.
- float pi =3.14f; ( // 접미사 f 대신 F를 사용해도 된다. 생략불가)
- double rate = 1.618d; ( // 접미사 d 대신 D를 사용해도 된다. 생략가능)
'A'와 같이 작은 따옴표로 문자 하나를 감싼 것을 '문자 리터럴'이라고하며
두 문자 이상은 큰 따옴표로 감싸야 하며 "문자열 리터럴"이라고 한다.
Char타입의 변수는 단 하나의 문자만 저장할 수 있으므로 , 여러 문자를 저장하려면
String 타입을 사용해야 한다.
- String str = ""; (내용이 없는 빈 문자열)
- char ch = ''; (' ' 안에는 반드시 하나의 문자가 필요)
- char ch = ' ' (공백 문자(blank)로 변수 ch를 초기화
원래 String은 클래스이므로 아래와 같이 객체를 생성하는 연산자 new를 사용해야
하지만 특별히 이와 같은 표현도 허용된다.
- String name = new String("JAVA"); ( String 객체를 생성)
- String name = "JAVA" ( 위의 문장을 간단히. 둘의 차이점은 뒤에서)