Нулевое или нулевое значение строки оценивается
В процессе разработки я часто сталкиваюсь с следующими неправильными использования:
1. Использование ошибок 1:
if (name == "") {// что -то делать} 2. Использование ошибок 2:
if (name.equals ("")) {// что -то делать}
3. Использование ошибок три:
if (! name.equals ("")) {// что -нибудь что -то}
Давайте объясним:
Вышеупомянутое использование ошибок 1 является наиболее вероятной ошибкой, которую делают новички, и наименьшее вероятно, что будут обнаружены, поскольку их синтаксис в порядке, а компилятор Java не сообщает об ошибке при компиляции. Тем не менее, это условие может вызвать ошибку в программе во время выполнения и никогда не будет правдой. Другими словами, операторы в блоке никогда не будут выполнены.
Написаны вышеупомянутое использование 2 и использование 3, в том числе ошибки, которые также легко изготавливать многие Java. Почему это неправильно? Может быть, вы будете озадачены.
Да, их написание верно, но не хватает условия нулевого суждения. Представьте себе, что произойдет, если имя = null? Следствием этого является то, что ваша программа вызовет исключение NullPointerException, система будет приостановлена и больше не предоставляет нормальных услуг.
Конечно, если вы раньше вынесли суждение об имени, исключение.
Правильный способ написать должен сначала добавить условие имени! = NULL, например:
if (name! = null &&! name.equals ("")) {// что -нибудь что -то}или
if (! "". Equals (name)) {// write "" перед ним, так что независимо от того, является ли имя нулевым или нет, ошибки не будет. // что -то делаю}
Здесь давайте приведем простой пример:
Testnullorempty.java
открытый тест класса {public static void main (string args []) {string value = null; testnullorempty (значение); value = ""; testnullorempty (значение); value = ""; testnullorempty (значение); value = "Привет, я"; testnullorempty (значение); } static void testnulloreMpty (string value) {if (value == null) {System.out.println ("значение is null"); } else if ("". } else {System.out.println ("значение IS /" " + value +" /""); } if (value == ") {// андеррайтинг NG // Не используйте это письмо}}} Выполнение компиляции:
c:/> javac testnullorempty.javac:/> java testnullorempty
Значение null.value является пустым, но не null.value - это "" Значение "Привет, я!"
Сравните строковые адреса равны
пакет com; открытый класс A { / ** * @param args * / public static void main (string [] args) {string a = "hello"; Строка b = "he he"; Строка C = A.SubString (0, 2); System.out.println (b.equals (c)); // true system.out.println (b == c); // false string d = new String ("hello"); System.out.println (d.equals (a)); // true system.out.println (d == a); // false string e = new StringBuilder ("hello"). ToString (); System.out.println (e.equals (a)); // true system.out.println (e == a); // false system.out.println (e.equals (d)); // true system.out.println (e == d); // ложная строка f = "hello"; System.out.println (f.equals (a)); // true system.out.println (f == a); // true system.out.println (f == "hello"); // true system.out.println (f == "ад"+"o"); // true String g = b+"llo"; System.out.println (g == f); // ложная строка h = "he"+"llo"; System.out.println (h == f); // true}}Суммировать:
1. Строка от нового-это повторное распределение памяти, строки не обмениваются, а несколько новых новинок не совместно используются.
2. Строки и статические строковые переменные, которые сплайсированные или перехватываемые, не используются через строковые функции.
3. Есть две ситуации для строк, полученных плюс знаки.
«Он»+«llo» - это статическая строка, которая общая
B string a = "he he"; A+"LLO" не является статической строкой, она не обменивается