1. Java / Говнокод #8710

    +75

    1. 1
    2. 2
    3. 3
    if(getFillColor().length() > 0){
    		/***/
    	}

    проверка на инициализацию переменной

    Запостил: JJunior, 02 Декабря 2011

    Комментарии (22) RSS

    • А что не так?
      isEmpty() появилось в 1.6, до нее это был единственный способ проверки, что строка не пустая.
      Ответить
    • private static String fillColor = "" ;


      код используется как проверка установления параметра
      Ответить
    • Предложите свой вариант.
      Ответить
      • !=""
        Ответить
        • А сравнение строк в жабе не через хеш делается? Если так, то ваш вариант накладней получается...
          Ответить
          • вообще вариант абсолюта не совсем корректен, и может не всегда работать
            Ответить
            • это псевдокод. за конкретикой - к жабистам.
              Ответить
            • Вернее сказать — будет работать почти никогда.
              Ответить
              • поскольку в джаве строки иммутабельны, то чаще всего разделяется один инстанс на все случаи жизни. тогда будет работать.
                Ответить
                • Если пустая строка получилась не ссылкой на литерал, то не будет. Даже и насчёт литералов я не уверен.
                  Ответить
                  • насчет литералов - точно будет работать.

                    String literals-or, more generally, strings that are the values of constant expressions (§15.28)-are "interned" so as to share unique instances, using the method String.intern.

                    (http://java.sun.com/docs/books/jls/third_edition/html/lexical.html#3.10.5)
                    Ответить
          • != проверяет равенство ссылок. Пустая строка будет интернирована, поэтому приведённый код скорее всего будет работать правильно.
            Ответить
            • "Surprise!".substring(0,0)
              Ответить
              • ага, да вот только пустые строки в приведённых отрывках везде входят в качестве литералов.
                "Surprise!".substring(0,0).intern()
                Ответить
                • Безусловно, в общем случае так сравнивать строки нельзя.
                  Ответить
      • Поясните.
        Ответить
      • fillColor = null ;
        
        (getFillColor != null)
        Ответить
        • тут важно, как этот getFillColor вызывают. Может в коде где есть заточка на то что он никогда не null.
          Ответить
    • показать все, что скрытоvanished
      Ответить

    Добавить комментарий