В Java все находится в форме класса.
Если вы хотите использовать любой объект, тогда у вас есть две фазы:
Пример:
Object a;
a=new Object();
То же самое для концепции массива
Item i[]=new Item[5];
i[0]=new Item();
Если вы не дают секцию инициализации, тогда возникает NullpointerException
.
Аргумент! оператор и первый аргумент тернарного оператора оба неявно преобразовываются в bool, таким образом!! и?: глупые избыточные художественные оформления IMO броска. Я голосую за
b = (t != 0);
Никакие неявные преобразования.
Я использовал бы bool b = t и оставил бы предупреждение компиляции внутри, комментируя безопасность этой конкретной строки. Отключение предупреждения может укусить Вас в торце в другой части кода.
Двойное не чувствует себя забавным мне, и в отладке код будет очень отличаться, чем в оптимизированном коде.
, Если Вы любите!! Вы всегда могли Макрос это.
#define LONGTOBOOL(x) (!!(x))
(как в стороне, тернарный оператор - то, что я одобряю в этих случаях)
Я рекомендую использовать
если (x! = 0)
или
, если (x! = ПУСТОЙ УКАЗАТЕЛЬ)
, вместо если (x); это более понятно и читаемо.
!! только полезно, когда Вы используете булево выражение арифметическим способом, например:
c = 3 + !!extra; //3 or 4
(Чей стиль является различным обсуждением.), Когда все Вам нужно, булево выражение!! избыточно. Запись
bool b = !!extra;
имеет столько же смысла сколько:
if (!!extra) { ... }
Отключите предупреждение.
Запись для ясности сначала; тогда профиль; тогда оптимизируйте для скорости при необходимости.
Я использовал бы b = (0! = t) - по крайней мере, любой нормальный человек может считать его легко. Если бы я видел бы дважды блин в коде, я был бы в значительной степени удивлен.
!! может быть компактным, но я думаю, что это излишне сложно. Лучше отключить предупреждение или использовать тернарный оператор, по-моему.
Если Вы волнуетесь по поводу предупреждения, можно также вынудить состав исполнителей: bool b = (bool)t;
Я никогда рекомендую не подавить то предупреждение, и никогда использование c бросило (bool) для подавления его. Преобразования нельзя всегда называть, как Вы предполагаете.
существует различие между выражением, которое оценивает к истинному и булевской переменной того значения.
Оба!! и троичное взятие, привыкающее к, но, сделает задание точно так же, если Вы не захотите определять внутренние типы с перегруженными бросками к bool.
подход Dima прекрасен также, так как он присваивает значение выражения к bool.
Я не использовал бы:
bool b = !!t;
, Который является наименее читаемым путем (и таким образом самое твердое для поддержания)
, Другие зависят от ситуации.
, Если Вы преобразовываете в использование в bool выражении только.
bool b = t ? true : false;
if (b)
{
doSomething();
}
Тогда я позволил бы языку сделать это для Вас:
if (t)
{
doSomething();
}
, Если Вы на самом деле храните булево значение. Тогда сначала я задался бы вопросом, почему у Вас есть длинное в первых местах, которое требует броска. Для принятия Вас нужны длинное и значение bool, я рассмотрел бы все следующее в зависимости от ситуации.
bool b = t ? true : false; // Short and too the point.
// But not everybody groks this especially beginners.
bool b = (t != 0); // Gives the exact meaning of what you want to do.
bool b = static_cast<bool>(t); // Implies that t has no semantic meaning
// except as a bool in this context.
Сводка: Используйте то, что обеспечивает большую часть значения для контекста, в котором Вы находитесь.
Пытаются сделать его очевидным, что Вы делаете
Да это безопасно.
0 интерпретируется как ложь, все еще верно,
следовательно! 5 выходит как ложь
! 0 выходит как верный
так!! 5 выходит как верный
Все допустимые методы, все генерируют тот же код.
Лично, я просто отключаю предупреждение, таким образом, я могу использовать самый чистый синтаксис. Кастинг к bool не что-то, что я волнуюсь по поводу выполнения случайно.
Осторожный!
Те - очень отличные понятия:
При образовании моста тех понятий, это должно быть сделано явно. Мне нравится версия Dima лучше всего:
b = (t != 0);
, Что код ясно говорит: Сравните два числа и сохраните значение истинности в булевской переменной.
С другой стороны, можно сделать это: bool b = (t != 0)
Я действительно ненавижу!! t!!!!!!. Это имеет привкус худшей вещи о C и C++, искушение быть слишком умным наполовину с Вашим синтаксисом.
bool b (t! = 0);//лучший способ, по моему скромному мнению, он явно показывает то, что происходит.