Всем привет! В данной задаче (листинг ниже, код задачи немного изменен), в режиме дебага происходит что-то странное. Если при обычном запуске программы INDEX инкрементируется нормально, то в дебаге инкремен происходит на каждой строке кода, на которой стоит брейкпоинт (на которой есть создание или обращение к объекту), а если еще непосредственный вызов toString, то два раза!
То есть при дебаге вызывается метод toString() при создании объекта один раз, при инициализации int i - один раз, а на каждой строке sout - по два раза. Почему так?
public class Solution {
public static void main(String[] args) {
Hobby hobby = new Hobby(); // toString called - 1 time
int i = hobby.INDEX; // toString called - 1 time
System.out.println(Dream.HOBBY.toString()); // toString called - 2 times
System.out.println(new Hobby().toString()); // toString called - 2 times
}
interface Desire {
}
interface Dream {
Hobby HOBBY = new Hobby();
}
static class Hobby implements Dream, Desire {
Logger log = Logger.getLogger(Hobby.class.getName());
static int INDEX = 1;
@Override
public String toString() {
INDEX++;
log.info("tostring was called " + INDEX);
return "" + INDEX;
}
}
}