Это вопрос интервью:
Предположим, вы кодируете систему Android, которая использует JNI и некоторый код C ++ для чтения данных с последовательного интерфейса (например, UART).
Материал нижнего уровня будет заботиться о коде C ++, и в конечном итоге данные будут передаваться в интерфейс Java, где они будут обрабатываться как тип String.
Вопрос: предположим, что код Java, обрабатывающий чтение, выглядит примерно так:
private void parseSerialData(String input){
if (input==null){
//DO SOMETHING HERE
}
}
Будет ли когда-либо возможно выполнение условий блока if?
Мое понимание Java говорит мне, что это никогда не будет возможно, потому что (я могу быть совершенно неправ), нуль в Java - это способ обозначить «нет ссылки», нуль не является объектом, и это не было создан из класса. На уровне DVM или JVM, пока переменная была объявлена, была сделана ссылка, даже если для нее в стеке не было выделенной памяти.
Следовательно, для локальной переменной как параметра метода невозможно иметь ссылку для начала, не говоря уже о том, что позже ей была дана ссылка на указатель на объект String (даже если этот объект может не иметь информация с ним, тем не менее, является ненулевым объектом) и, как таковое, условие if никогда не будет выполнено.
Но я не мог решить, является ли этот вопрос вопросом с подвохом, и я что-то пропустил? Особенно если учесть, что в драке есть C ++, и я понятия не имею, каково это передавать пустую ссылку C ++ на Java, если это вообще имеет смысл?
Итак, будет ли когда-либо выполнено условие?