Тут проблема в отсутствии скобок и поэтому отрицание пытается примениться к 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
Что может напечатать метод print?
Anonymous Quiz
25%
10
1%
9
2%
8
1%
7
1%
6
6%
5
4%
4
1%
3
49%
все вышеперечисленное
10%
узнать ответ
👍6🔥4🥰1
Ответ к вопросу про инкремент под гонкой:
Рассуждения аналогичные как и тут:
https://t.me/java_interview_tasks/96
Для примера, посмотрим, как может получится 2 - это самый интересный случай (см. картинку к посту)
Остальные варианты (больше 2) возможно получить аналогичными рассуждениями.
Выводы: этот простой пример показывает, что не синхронизированный счётчик может терять много данных.
Если вам нужно использовать счётчик под гонкой, то надо синхронизировать инкремент или использовать уже синхронизированные счётчики, например, AtomicInteger
Рассуждения аналогичные как и тут:
https://t.me/java_interview_tasks/96
Для примера, посмотрим, как может получится 2 - это самый интересный случай (см. картинку к посту)
Остальные варианты (больше 2) возможно получить аналогичными рассуждениями.
Выводы: этот простой пример показывает, что не синхронизированный счётчик может терять много данных.
Если вам нужно использовать счётчик под гонкой, то надо синхронизировать инкремент или использовать уже синхронизированные счётчики, например, AtomicInteger
👍7🔥5
Может ли метод print напечатать 0, 1 или 2?
Anonymous Quiz
8%
0 может
2%
1 может
22%
2 может
35%
все не могут
33%
узнать ответ
🔥4👍2
Логическая задача с собеседования:
Два друга, Андрей и Иван, решили приготовить пирог. Андрей внес вклад, добавив в тесто 300 грамм муки, а Иван добавил 200 грамм сахара. Когда пирог был испечен, к ним заглянул сосед и они пригласили его на чаепитие. Пирог разделили поровну на троих. После чаепития сосед оставил им 500 рублей в качестве благодарности.
Андрей предложил делить деньги так: 300 рублей ему, а 200 рублей Ивану. Однако Иван не согласился.
Как вы считаете, как они должны разделить вознаграждение, чтобы все было честно?
Два друга, Андрей и Иван, решили приготовить пирог. Андрей внес вклад, добавив в тесто 300 грамм муки, а Иван добавил 200 грамм сахара. Когда пирог был испечен, к ним заглянул сосед и они пригласили его на чаепитие. Пирог разделили поровну на троих. После чаепития сосед оставил им 500 рублей в качестве благодарности.
Андрей предложил делить деньги так: 300 рублей ему, а 200 рублей Ивану. Однако Иван не согласился.
Как вы считаете, как они должны разделить вознаграждение, чтобы все было честно?
👍9
Как вы считаете, как они должны разделить вознаграждение, чтобы все было честно?
Anonymous Quiz
19%
предложено честно
58%
не честно
23%
узнать ответ
👍5❤2🔥2
Что напечатает код?
Anonymous Quiz
59%
1
8%
2
12%
3
0%
4
5%
Будет Runtime exception
8%
Будет Compilation error
7%
Узнать ответ
🔥9🤡3👍2
Проблема в порядке операций, что может ввести в заблуждение - тернарный оператор имеет низкий приоритет
Пример кода, который однозначно будет пониматься:
Пример кода, который однозначно будет пониматься:
👍8
Что делает метод trimAll?
Anonymous Quiz
75%
удаляет из каждой строки в списке все начальные и конечные символы пробелов
19%
ничего
2%
не знаю
3%
узнать
👍7🔥6😁2👎1