Что вернет метод?
Anonymous Quiz
42%
123,$user$,321
36%
123,alex,321
6%
123,$alex$,321
3%
Ничего не вернет
7%
Будет runtime exception
6%
Узнать ответ
🔥11🐳2
Метод replace применится только к последней строке "321", а не после конкатенации всех строк, поэтому ответ будет «123,$user$,321»
👍15🤯2🐳2
С какой версии джавы будет компилироваться код выше?
Anonymous Quiz
5%
7
16%
8
2%
9
15%
11
15%
15
23%
17
10%
21
15%
Ни одна из перечисленных
🤡25👍5
Что напечатает код если value = null?
Anonymous Quiz
30%
(---)
2%
(null)
17%
null
10%
ничего
12%
будет runtime exception
18%
будет compilation error
11%
узнать ответ
🔥11👎4👍1
Тут опять проблема в порядке операций, что может ввести в заблуждение - тернарный оператор имеет низкий приоритет.
Пример корректного варианта (который не вводит в заблуждение других): return "Str:" + (value != null ? value : "(---)");
Пример корректного варианта (который не вводит в заблуждение других): return "Str:" + (value != null ? value : "(---)");
Telegram
Java Interview Tasks
Что вернет метод, если value = null?
👍10🔥4👎1
Что напечатает код?
Anonymous Quiz
21%
1
42%
ничего
4%
будет runtime exception
23%
будет compilation error
2%
еще что-то)
7%
узнать ответ
🔥11
Тут проблема в отсутствии скобок и поэтому отрицание пытается примениться к obj, а это Object и поэтому код не скомпилируется. Правильный вариант будет такой: if (!(obj instanceof String)) {...}
Telegram
Java Interview Tasks
Что напечатает код, если obj = "123"?
👍15🔥5🐳2
🔥10👍2
В приведенном коде ошибка заключается в том, что метод
Поэтому, результат вызова
Вот как выглядит исходный код:
В этом коде
Чтобы исправить этот код и получить правильный результат, необходимо присвоить результат выполнения метода
add
класса BigInteger
не изменяет текущее значение объекта, а возвращает новый объект BigInteger
, который является результатом сложения. BigInteger
является неизменяемым классом, что значит, что все его методы возвращают новые объекты, а не изменяют текущий объект.Поэтому, результат вызова
value.add(BigInteger.ONE)
не сохраняется и не присваивается обратно переменной value
. Исходная переменная value
остается прежней и не изменяется.Вот как выглядит исходный код:
BigInteger value = BigInteger.TWO;
value.add(BigInteger.ONE);
System.out.println(value); // Выводит 2, а не 3
В этом коде
System.out.println(value)
выведет 2
, потому что переменная value
не была изменена.Чтобы исправить этот код и получить правильный результат, необходимо присвоить результат выполнения метода
add
обратно переменной value
:BigInteger value = BigInteger.TWO;
value = value.add(BigInteger.ONE);
System.out.println(value); // Теперь выведет 3
Telegram
Java Interview Tasks
Что напечатает код?
👍15🔥3
String str = "s=" + index + 1;
Что будет в переменной str, если index = 3?
Что будет в переменной str, если index = 3?
Anonymous Quiz
1%
s=1
0%
s=2
4%
s=3
73%
s=31
19%
s=4
3%
Узнать ответ
👍11🐳2
Тут может возникнуть ощущение что будет s=4, но сложение идет перед конкатенацией, однозначно бы выглядел код:
String str = "s=" + (index + 1);
String str = "s=" + (index + 1);
Telegram
Java Interview Tasks
String str = "s=" + index + 1;
Что будет в переменной str, если index = 3?
s=1 / s=2 / s=3 / s=31 / s=4 / Узнать ответ
Что будет в переменной str, если index = 3?
s=1 / s=2 / s=3 / s=31 / s=4 / Узнать ответ
👍6🔥2🐳2
Что напечатает код?
Anonymous Quiz
2%
ничего
5%
будет runtime exception
19%
будет compilation error?!
10%
"default"
33%
"test"
23%
другое
8%
узнать ответ
🔥7👍2
Проблема, с которой мы сталкиваемся, связана с тем, как компилятор Java обрабатывает varargs внутри условных выражений, особенно когда ветви условия производят разные типы. Вот подробное объяснение и пошаговое решение:
когда мы используем условное выражение, компилятор не может обернуть только одну из ветвей. Он воспринимает условное выражение как целое. Поскольку тип ветви then — String, а тип ветви else — Object[], тип всего условного выражения является общим суперклассом для String и Object[], то есть просто Object. Это не массив, поэтому компилятор добавляет автоматическое оборачивание, что означает, что массив params будет обернут ещё раз.
Вы можете исправить это, если не будете полагаться на компилятор и обернете строку вручную:
когда мы используем условное выражение, компилятор не может обернуть только одну из ветвей. Он воспринимает условное выражение как целое. Поскольку тип ветви then — String, а тип ветви else — Object[], тип всего условного выражения является общим суперклассом для String и Object[], то есть просто Object. Это не массив, поэтому компилятор добавляет автоматическое оборачивание, что означает, что массив params будет обернут ещё раз.
Вы можете исправить это, если не будете полагаться на компилятор и обернете строку вручную:
params.length == 0 ? new Object[]{"default"} : params
. Однако, вероятно, будет менее запутанно вообще избегать условных выражений внутри вызова метода с varargs.Telegram
Java Interview Tasks
Что напечатает код?
🔥9🐳4❤1👍1