Что не так с этим кодом битовой манипуляции из интервью?

Как будто вы пытаетесь получить доступ к объекту, который является null. Рассмотрим ниже пример:

TypeA objA;

. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException, что имеет смысл.

См. Также этот пример:

String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
25
задан Yi Jiang 23 November 2010 в 07:12
поделиться

3 ответа

Поскольку одно значение не инициализируется до выполнения операции, и поэтому я думаю, что поведение не определено, значением может быть что угодно.

1
ответ дан dutt 23 November 2010 в 07:12
поделиться

Хотя можно утверждать, что, поскольку это не переполнение буфера или какая-либо другая ошибка, которая может быть использована, это вещь в стиле , а не ошибка, я уверен на 99%, что ответ автор вопроса ищет, чтобы value оперировали до того, как ему присвоили. Значение будет произвольным мусором, и вряд ли это будет то, что имелось в виду, так что это «потенциально неправильно».

0
ответ дан mattdm 23 November 2010 в 07:12
поделиться

Используя MSVC, я думаю, что оператор выполнил бы то, что, скорее всего, предполагалось, то есть: очистить все, кроме наименее значимых 16 битов значения, но я встречал другие платформы, которые интерпретировали бы литерал 0xffff как эквивалентный (short) -1, затем знак расширяется для преобразования в long, и в этом случае выражение «значение & amp; = 0xFFFF» не будет иметь никакого эффекта. «значение & amp; = 0x0FFFF» является более явным и надежным.

-1
ответ дан figmente 23 November 2010 в 07:12
поделиться