0822 | 자바의 정석 기초편 :: ch2-6
~ 22.08.20-22 제주여행. 22일자부터 얼른 벌충 ~
리터럴의 접두사와 접미사
종류 | 리터럴 | 접미사 |
논리형 | false, true | 없음 |
정수형 | 100L,123(int), 0xFF(int) | L (long type,소문자l과 1을 혼동하지 않기위해 대문자로 작성) |
실수형 | (소수점) 3.14, 1.4f | f (float) ,d (d는 생략가능) |
문자형 | (작은따옴표) 'A', '1','\n' | 없음 |
문자열 | (큰따옴표) "ABC", "123","TRUE" | 없음 |
* \는 줄바꿈문자, 개행문자
boolean power = true; or false;
char ch ='A';
String str = "ABC"; "A" // 여러 문자열은 큰따옴표, 하나의 문자열도 가능
byte b = 127; // 정수인데 접미사가 없으니까 int타입임을 알 수 있음 byte타입에 저장할수 있는 수는 -128~127이므로 127은 저장 가능.
byte b = 128; // 에러 발생.
int i = 100; // 10진수 (접두사 없음)
int oct = 0100; // 8진수 (접두사 0)
int hex = 0x100; // 16진수 (접두사 0x)
int n = ob0101; // 정수형 앞에 ob가 붙으면 2진수 의미 (jkd 1.7부터 적용)
long 1 = 10_000_000_000L; // int타입의 최대값은 20억정도 이므로 그 이후 값은 long type. 언더바는 큰 숫자에 점 대용처럼 알아보기 쉬우라고 넣는 것. 아무데나 넣어도 상관은 없음.
long 1 = 100; // 가능
float f = 3.1f; // f를 생략할 경우 저절로 d타입이 되면서 에러 발생
double d = 3.1d; // d는 생략 가능.
10. > 10.0
.10 > 0.10 // 둘다 실수형이고 더블타입.
1e3 // e는 실수형에 사용되며 10의 n제곱, 1000.0과 같고 접미사가 없으므로 더블타입.
public class VarEx3 {
public static void main(String[] args) {
final int score = 100;
boolean power = true;
byte b = 127;
int oct = 010; // 8진수, 10진수로 8
int hex = 0x10; // 16진수, 10진수로 16
long l = 10_000_000_000L;
float f = 3.14f;
double d = 3.14;
System.out.println(b); //println은 10진수로만 출력가능 접두사, 접미사는 출력되지않음
System.out.println(10.);
System.out.println(.10);
System.out.println(.10f);
System.out.println(1e3);
}
}
✔ 각 타입별 숫자 범위를 다시한번 알아봐야겠다. 헷갈린다.
변수와 리터럴의 타입 불일치
1) 범위가 변수 > 리터럴인 경우 : ok
int i = 'A'; // int > char , A가 65로 변환되어 저장됨.
long 1 = 123; // long > int
double d = 3.14f // double > float
2) 범위가 변수 < 리터럴인 경우 : error
int i = 3_000_000_000 // int의 범위 20억을 벗어난 30억이므로 불가
long 1 = 3.14f; // long (8byte), float (4byte)여도 실수형은 정수형보다 저장범위가 훨씬 넓기 때문에 error
float f = 3.14; // float < double이므로 불가.
3) byte, short 변수에 int리터럴 저장 가능.
byte b = 100; // byte의 범위 -128~127에 속하므로 가능