본문 바로가기

Java8

[소소한 정보] this와 this() 생성자에서 다른 생성자를 호출할 수 있다. 단 2가지 조건이 있다. 다른 생성자를 호출할 때 생성자의 이름으로 클래스 이름이 아닌 this를 사용한다. 반드시 생성자의 첫 줄에서만 다른 생성자를 호출할 수 있다. class Test { int temp1; int temp2; Test() { this(0); temp2 = 0; } Test(int temp1) { this.temp1 = temp1; } } Test()에서 this(0)으로 다른 생성자를 호출했다. //Case 1 Test() { Test(0); //this가 아닌 클래스명을 사용해서 생성자 호출 this.temp2 = 0; } //Case 2 Test() { this.temp2 = 0; this(0); //첫 줄에서 다른 생성자를 호출하지 .. 2022. 1. 20.
[소소한 정보] 가변 인자 (Variable arguments) JDK5.1 부터 가변 인자 기능이 생겼다고 한다. 타입... 매개변수명 이런 식으로 사용할 수 있다. 대표적으로 printf가 가변 인자를 사용해서 구현되어 있다. public PrintStream printf(String format, Object... args) { /* 생략 */ } 가변 인자는 매개변수 목록 중에서 가장 마지막에 와야 한다. 그렇지 않으면 다른 매개변수와 구분이 안 되기 때문이다. //컴파일 에러 public PrintStream printf(Object... args, String format) { /* 생략 */ } 즉 위와 같은 가변 인자 사용은 안된다. 어디까지가 가변 인자이고(Object... args) 어디부터가 이후의 매개변수인지(String format) 구분할 수.. 2022. 1. 20.
[소소한 정보] 컴파일러의 리터럴 연산, 길이가 0인 배열 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. 길이.. 2022. 1. 18.