Другое событие NullPointerException
возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.
String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
System.out.println(phrase.equals(keyPhrase));
}
Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals
для гарантированного непустого объекта.
Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null
.
Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.
String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
System.out.println(phrase.equals(keyPhrase));
}
Примечание @tchrist рекомендует Данные:: Выведите по Данным:: Самосвал. Я не знал о нем, но от взглядов его, кажусь, что и намного легче использовать и создание, лучше выглядящее и легче интерпретировать результаты.
Отрывок примеров показан в вышеупомянутой ссылке.
use Data::Dumper;
package Foo;
sub new {bless {'a' => 1, 'b' => sub { return "foo" }}, $_[0]};
package Fuz; # a weird REF-REF-SCALAR object
sub new {bless \($_ = \ 'fu\'z'), $_[0]};
package main;
$foo = Foo->new;
$fuz = Fuz->new;
$boo = [ 1, [], "abcd", \*foo,
{1 => 'a', 023 => 'b', 0x45 => 'c'},
\\"p\q\'r", $foo, $fuz];
########
# simple usage
########
$bar = eval(Dumper($boo));
print($@) if $@;
print Dumper($boo), Dumper($bar); # pretty print (no array indices)
$Data::Dumper::Terse = 1; # don't output names where feasible
$Data::Dumper::Indent = 0; # turn off all pretty print
print Dumper($boo), "\n";
$Data::Dumper::Indent = 1; # mild pretty print
print Dumper($boo);
$Data::Dumper::Indent = 3; # pretty print with array indices
print Dumper($boo);
$Data::Dumper::Useqq = 1; # print strings in double quotes
print Dumper($boo);
Как обычно с Perl, Вы могли бы предпочесть альтернативные решения почтенным Данным:: Самосвал:
И конечно с отладчиком, можно отобразить любую переменную с командой 'x'. Мне особенно нравится форма' x 2 $complex_structure
', где 2 (или любое число) говорит отладчику отображать только 2 уровня вложенных данных.
Альтернатива Данные:: Самосвал , который не производит допустимый код Perl, но вместо этого более skimmable формат (то же как x
команда отладчика Perl) Dumpvalue. Это также использует намного меньше памяти.
Также, существует Данные:: Дамп:: Стример , который более точен в различном краю и угловых случаях, чем Данные:: Самосвал .
Я использую Данные:: Дамп , это производится, немного более чистое, чем Данные:: Самосвал (никакой $VAR1), это обеспечивает быстрые ярлыки, и это также пробует к DTRT, т.е. это распечатает к STDERR, когда названо в пустом контексте и возвращать строку дампа если не.
Я пошел, ища то же самое и нашел эта прекрасная небольшая функция Perl , явно предназначенный генерировать результаты как print_r ().
автор сценария задавал Ваш точный вопрос на форуме здесь .
print objectToString($json_data);
Дает этот вывод:
HASH {
time => 1233173875
error => 0
node => HASH {
vid => 1011
moderate => 0
field_datestring => ARRAY {
HASH {
value => August 30, 1979
}
}
field_tagged_persons => ARRAY {
HASH {
nid => undef
}
}
...and so on...