Логическое И &&
принимает значение true
в единственном случае – если оба операнда true
.
a && b
проверяет по очереди: сначала, приводится ли к значению true
первый операнд, a
? Если нет, то дальше проверять нет смысла и выражение возвращает первый операнд, а
.
Если же a
не пустой и при переводе в логическое true | false даёт таки true
, то так же проверяется второе выражение, b
.
В вашем примере сначала проверяется, что там в jj. Если пустота, то более ничего не делается. Если же там, например, функция, то надо проверить и второй операнд. Для этого надо выполнить функцию jj(false)
.
Таким образом, проверяется, не пусто ли jj, и если не пусто, то вызывается функция jj(false).