본문 바로가기
Java

[소소한 정보] 컴파일러의 리터럴 연산, 길이가 0인 배열

by Kloong 2022. 1. 18.

1. 컴파일러의 리터럴 연산

char c1 = 'a';

char c2 = c1 + 1;  //컴파일 에러
char c3 = 'a' + 1; //에러 없음

c2에 c1 + 1 을 대입할 때, 산술 연산에서의 형변환으로 인해 (int)c1 + 1이 되고, 그 결과값도 int가 된다.

따라서 int를 char에 대입하려고 하는 경우가 되므로 컴파일 에러가 발생한다.

하지만 c3 = 'a' + 1 에서는 컴파일 에러가 발생하지 않는데,

컴파일러가 프로그램의 효율을 위해 컴파일 타임에 해당 코드를

char c3 = 'b';

형태로 변환해 주기 때문이다.

따라서 코드의 가독성을 위해서

int second = 60 * 60 * 24;

이런식으로 표현을 해도 프로그램의 효율에는 영향을 미치지 않는다는 것이다.

 

2. 길이가 0인 배열

int[] arr = new int[0];
int[] arr = {}

자바에선 이런 것이 가능하다.

길이가 0인 배열이 도대체 어디에 쓸모가 있냐고 하면,

public class Main
{
    public static void main(String[] args)
    {
        for (int i = 0; i < args.length; i++)
            System.out.println(args[i]);
    }
}

위와 같은 프로그램을 실행시킬 때, 매개변수를 1개도 입력하지 않는다면 args가 null이 되어서 args.length에 접근할 때 NullPointerException 같은 문제가 생길 것만 같은 기분이 들 것이다.

하지만 아니다. 매개변수가 없는 경우 args는 길이가 0인 배열이 되어서, args.length가 0이 되게 되고 for문이 바로 종료된다.

길이가 0인 배열은 이런 경우에 유용하다.

댓글