자바의정석

[자바의 정석 - 기초편] ch2-6 리터럴의 타입과 접미사

유호야 2022. 1. 19. 12:35
반응형

6. 리터럴의 접두사와 접미사

: 모든 리터럴에는 타입이 있다.

접미사는 대소문자를 구별하지 않지만, I는 숫자 1과 헷갈리기 때문에 보통 대문자 L을 사용한다. 

f에만 붙여도 구별이 가능하기 때문에, d는 일반적으로 생략

\n : 개행문자

문자가 하나여도, " 큰 따옴표로 붙이면, 문자열 타입이다.

byte 변수는 접미사가 붙지 않아서, integer 타입의 숫자를 작성하면 되지만
: 128부터 127까지 그 사이의 값이어야 한다.

- 정수형 리터럴은 10진법 이외에도 다른 진법으로 표현이 가능하다. 

0이 붙으면 8진수
0b가 붙으면 2진수를 의미한다. 
0x.... 16진수
백억은 무조건 integer의 범위를 넘는 (예: 백억) 값을 입력할 때는 접미사 L을 꼭 붙여야 한다. 

f는 생략 불가능하다. 

* 퀴즈

10.    =    10.0 에서 0 이 생략된 것 = double type
.10    =    0.10에서 0. 이 생략된 것  = double type
10f    =    10.0f에서 .0f가 생략된 것 = float type   
1e3    =   1 * 10^3 = 1000 = 1000.0 = 1000.0 d(생략) 

ㄴ e가 의미하는 것 10^n 제곱 / 기호 e 는 실수형에 사용됨

7. 변수와 리터럴의 타입 불일치

1) 범위가 변수 > 리터럴 인경우 ok

2) 범위가 변수 < 리터럴인 경우, 에러
long l = 3.14f ;
long(8byte), float(4byte)
가능할 것 같지만 사실
실수형은 정수형보다 저장범위가 훨씬 넓다.

float f = 3.14 ;  // double 타입을 float 타입의 변수에 저장한다. (불가능 double이 더 넓겠지?)
         = 3.14d

3) byte, short 변수에 int 리터럴 저장 가능
byte와 short만의 지정된 리터럴 타입이 없기 때문에 int 타입으로 저장 가능하지만,
그 범위 내에서 입력해야 한다. 그렇지 않으면 에러

 

package ch02;

public class VarEx3 {

	public static void main(String[] args) {
		
		final int score = 100;
//		score = 200;
		boolean power = false;
		
		byte b = 127;

		int oct = 010; // 8진수, 10진수로 8
		int hex = 0x10; // 16진수, 10진수로 16
		System.out.println(oct);
		System.out.println(hex);
		
		//8진수나 16진수로 출력하고 싶다면 printf 메소드를 사용해야 한다.
		
		long l = 1000_000_000;
		long l2 = 10_000_000_000L;
		//L을 붙여줘야 에러가 발생하지 않는다. 
		// (int)10_000_000_000L 이라서 그런가?
		
		float f = 3.14f; 
//		float f2 = 3.14; // 에러 발생
		double d = 3.14d;
		double d2 = 3.14f; // 즉 작은 물건을 큰 그릇에 담는 경우
		
		System.out.println(10.);
		System.out.println(.10);
		System.out.println(10f);
		System.out.println(1e3);
		
		//값이 출력될 때 접미사는 출력되지 않는다.
		
		
	}

}
반응형