Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException
вообще.
См. также: A хороший список лучших практик
Я бы добавил, очень важно, хорошо использовать модификатор final
. Использование "окончательной" модификатор, когда это применимо в Java
Сводка:
final
для обеспечения хорошей инициализации. @NotNull
и @Nullable
if("knownObject".equals(unknownObject)
valueOf()
поверх toString (). StringUtils
StringUtils.isEmpty(null)
. Не обязательно. Обычно вы не выделяете точный объем памяти, который вам нужен для строки, поскольку это затрудняет проскальзывание и поиск того, что вам нужно в памяти, поэтому распределения будут выполняться в кусках.
Здесь мы создаем строки «a», «aa», «aaa», размер. Обратите внимание, что размер объекта не увеличивается с каждым дополнительным символом, но когда вы проходите порог, вы получаете более крупный кусок, назначенный вам.
Таким образом, размер объекта не говорит вам, сколько байтов данных на самом деле занимает, он просто говорит вам, сколько байтов было выделено. На самом деле это не то же самое.