Как будто вы пытаетесь получить доступ к объекту, который является null
. Рассмотрим ниже пример:
TypeA objA;
. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException
, что имеет смысл.
См. Также этот пример:
String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
Поскольку одно значение не инициализируется до выполнения операции, и поэтому я думаю, что поведение не определено, значением может быть что угодно.
Хотя можно утверждать, что, поскольку это не переполнение буфера или какая-либо другая ошибка, которая может быть использована, это вещь в стиле , а не ошибка, я уверен на 99%, что ответ автор вопроса ищет, чтобы value
оперировали до того, как ему присвоили. Значение будет произвольным мусором, и вряд ли это будет то, что имелось в виду, так что это «потенциально неправильно».
Используя MSVC, я думаю, что оператор выполнил бы то, что, скорее всего, предполагалось, то есть: очистить все, кроме наименее значимых 16 битов значения, но я встречал другие платформы, которые интерпретировали бы литерал 0xffff как эквивалентный (short) -1, затем знак расширяется для преобразования в long, и в этом случае выражение «значение & amp; = 0xFFFF» не будет иметь никакого эффекта. «значение & amp; = 0x0FFFF» является более явным и надежным.