2013-03-05 2 views
0

Вопрос довольно прост.Что использовать: вместо переменной boolean или для значения true/false

Object obj; 

obj = new Object(); 

if(obj!=null) { 
    // this means my object is *set* 
} 

Другой

Object obj; 
Boolean objSet = false; 

obj = new Object(); 
objSet = true; 

if(objSet) { 
    // this means my object is *set* 
} 

Какой из них более правильно. Я слышал, что базы данных и некоторые методы действуют по-разному.

+0

* «Я слышал, что базы данных и некоторые методы действуют по-разному.» * - о чем вы говорите? –

ответ

6

«Правильно» - это не слово выбора. Если он компилирует и делает то, что он должен, это правильно.

В качестве полезности я бы лучше использовал более непосредственную проверку. Добавление логической переменной во избежание выполнения проверки == null означает дополнительные (минимальные накладные расходы), большее количество строк, трудность чтения и может привести к ошибкам.

Добавьте логическую переменную, если условие достаточно сложное, чтобы было необходимо ее явное (vg., Если вам нужно проверить, что все/все в наборе условий выполнены).

И BTW, так как вы используете Boolean, а не boolean, вы вводите возможность того, что objSet имеет значение null, если вы не правильно его кодируете.

+0

Отличное спасибо! –

3

Ни более правильно:

  • С точки зрения поведенческой семантики, они делают то же самое ... при условии, что они правильно выполнены.

  • С точки зрения производительности разница , вероятно, пренебрежимо мала в контексте всего приложения.

  • С точки зрения использования пространства, разница вероятно ничтожна ... если obj и objSet не являются полями и у вас есть много, много экземпляров соответствующего класса.

  • С точки зрения надежности (например, избежания неожиданных NPE) нет качественной разницы. Вы можете получить NPE в любом случае, если вы забудете пройти тест. (Я предполагаю, что если вы изменили пример, чтобы включить что-то, что меняет obj, то версия с отдельным флагом более сложна и, следовательно, сложнее получить право. Но если вы инкапсулируете логику в методе setter, вам нужно только ее получить право один раз ...)

Так что, действительно, это сводится к тому, какая версия кода более читаема. И это субъективно ... так «более правильно» не входит в него. Большинство опытных программистов, вероятно, узнают идиому и предпочтут первую версию.

+0

Спасибо за двойное разъяснение! –

Смежные вопросы