Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.
Например, ниже - класс ученика, который будет использовать его в нашем коде.
public class Student {
private int id;
public int getId() {
return this.id;
}
public setId(int newId) {
this.id = newId;
}
}
Приведенный ниже код дает вам исключение с нулевым указателем.
public class School {
Student obj_Student;
public School() {
try {
obj_Student.getId();
}
catch(Exception e) {
System.out.println("Null Pointer ");
}
}
}
Поскольку вы используете Obj_Student
, но вы забыли инициализировать его, как в правильном коде, показанном ниже:
public class School {
Student obj_Student;
public School() {
try {
obj_Student = new Student();
obj_Student.setId(12);
obj_Student.getId();
}
catch(Exception e) {
System.out.println("Null Pointer ");
}
}
}
Я рекомендовал бы UTF-16 для любого вида манипулирования данными и UI. API Mac OS X и Win32 использует UTF-16, то же для wxWidgets, QT, ICU, Xerces и других. UTF-8 мог бы быть лучше для обмена данными и устройства хранения данных. См. http://unicode.org/notes/tn12/ .
, Но независимо от того, что Вы выбираете, я определенно рекомендовал бы против станд.:: строка с UTF-8 "только, когда необходимый".
Идут полностью с UTF-16 или UTF-8, но не смешивают и соответствуют, который напрашивается на неприятности.
UTF-16 является все еще кодировкой символов переменной длины (существуют больше, чем 2^16 unicode кодовые точки), таким образом, Вы не можете сделать O (1) строковые операции индексации. При выполнении большого количества такой вещи Вы ничего не сохраняете в скорости по UTF-8. С другой стороны, если Ваш текст включает много кодовых точек в этих 256-65535 диапазонах, UTF-16 может быть существенным улучшением размера. UCS-2 является вариацией на UTF-16, который является фиксированная длина, за счет запрещения любых кодовых точек, больше, чем 2^16.
, не зная больше о Ваших требованиях, я лично пошел бы для UTF-8. Является самым легким иметь дело с по всем причинам, которые уже перечислили другие.
Я никогда не находил причин использовать что-либо еще, чем UTF-8, чтобы быть честным.
Если Вы решаете пойти с кодировкой UTF-8, проверьте эту библиотеку: http://utfcpp.sourceforge.net/
Это может сделать Вашу жизнь намного легче.
Я на самом деле записал широко используемое приложение (5 миллионов + пользователи), таким образом, каждый используемый килобайт складывает, буквально. Несмотря на это, я просто придерживался wxString. Я настроил его, чтобы быть полученным из станд.:: wstring, таким образом, я могу передать их функциям, ожидающим wstring const&.
Обратите внимание на то, что станд.:: wstring является собственным Unicode на Mac (№ UTF-16 было нужно для символов выше U+10000), и поэтому он использует 4 bytes/wchar_t. Большое преимущество этого состоит в том, что я ++ получаю Вас следующий символ, всегда. На Win32, который верен только в 99,9% случаев. Как такой же программист, Вы поймете, как небольшие 99,9%.
, Но если Вы не убеждены, запишите функцию в верхний регистр станд.:: строка [UTF-8] и станд.:: wstring. Те 2 функции скажут Вам, каким путем является безумие.
Ваш дисковый формат является другим вопросом. Для мобильности, которая должна быть UTF-8. Нет никакого беспокойства порядка байтов в UTF-8, ни обсуждения ширины (2/4). Это может быть то, почему много программ, кажется, используют UTF-8.
На немного несвязанной ноте, читайте на строковых сравнениях Unicode и нормализации. Или Вы закончите с той же ошибкой как.NET, где у Вас может быть две переменные föà ¶ и föà ¶ отличие только по (невидимой) нормализации.
MicroATX является в значительной степени стандартным форматом материнской платы ПК, самым способным к 4-8 ГБ RAM. Если Вы говорите picoATX, возможно, Вы ограничены 1-2 ГБ RAM. Даже тогда это - много для среды разработки. Я все еще придерживался бы UTF-8 по упомянутым выше причинам, но память не должна быть Вашим беспокойством.
Из того, что я читал, лучше использовать 16-разрядное кодирование внутренне, если Вы не коротки на памяти. Это соответствует почти всем живым языкам в одном символе
, я также посмотрел бы ICU. Если Вы не собираетесь быть использующими определенными функциями STL строк, использование строковых типов ICU могло бы быть лучше для Вас.
Вы рассмотрели использование wxStrings? Если я помню правильно, они могут сделать utf-8 <-> преобразования Unicode и это сделают это немного легче, когда необходимо будет передать строки и от UI.