Почему 0 целочисленных значений ведет себя как ложь в операторе if в groovy? - PullRequest
0 голосов
/ 20 ноября 2018

Я написал эту часть кода.

Integer value = 0
if(value)
{
    print "true"
}
else
{
    print "false"
}

И вывод кода false.Может кто-нибудь объяснить мне, почему значение Integer 0 ведет себя как ложное в этом операторе if, когда оно не равно нулю и существует?

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

Когда Groovy видит переменную в контексте, где ожидается логическое значение, он вызывает метод DefaultGroovyMethods.asBoolean(object) для приведения указанного значения к своему логическому представлению.Для чисел выполняется следующий код:

/**
 * Coerce a number to a boolean value.
 * A number is coerced to false if its double value is equal to 0, and to true otherwise,
 * and to true otherwise.
 *
 * @param number the number
 * @return the boolean value
 * @since 1.7.0
 */
public static boolean asBoolean(Number number) {
    return number.doubleValue() != 0;
}

Источник: src / main / org / codehaus / groovy / runtime / DefaultGroovyMethods.java

Именно поэтому Groovy приводит от 0 до false и любое ненулевое число к true.

Существуют другие принуждения, которые Groovy сделал для вас, например, приведение пустого списка к false, приведение пустых строкна false и т. д. Я написал статью о некоторых из них , вы можете найти ее полезной.

0 голосов
/ 20 ноября 2018

Это часть " Groovy Truth "

5.7.Числа

Ненулевые числа верны.

assert 1
assert 3.5
assert !0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...