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인 배열은 이런 경우에 유용하다.
'Java' 카테고리의 다른 글
[Java] 람다식(Lambda Expression) (0) | 2022.10.12 |
---|---|
Exception 관련 클래스의 계층 구조 (Unchecked Exception/Checked Exception) (0) | 2022.03.31 |
변수의 초기화 (0) | 2022.01.20 |
[소소한 정보] this와 this() (0) | 2022.01.20 |
[소소한 정보] 가변 인자 (Variable arguments) (0) | 2022.01.20 |
댓글