以前我在if条件中有b=true
,它被认为是布尔值。
但同样不适用于整数。对于x=1
我遇到了错误
无法从int转换为boolean。
下面是代码段。
public class Tester {
public static void main(String[] args) {
boolean b = false;
if (b = true)
System.out.println("b true");
else
System.out.println("b false");
int x = 0;
if (x = 1)
System.out.println("x 1");
else
System.out.println("x 0");
}
}
答案 0 :(得分:4)
如Java语言规范section 15.26
中所述在运行时,赋值表达式的结果是赋值发生后变量的值。赋值表达式的结果本身不是变量。
分配实际上是表达式。他们也评估价值。有什么价值?分配给变量的值。因此,如果我们忽略赋值的副作用,则您的if语句等效于:
boolean b = false;
if (true)
System.out.println("b true");
else
System.out.println("b false");
int x = 0;
if (1)
System.out.println("x 1");
else
System.out.println("x 0");
很显然,if (1)
是无效的,因为if语句的boolean
中只能有()
个值。
答案 1 :(得分:1)
b = true
是一个赋值表达式,其值为true
。因此可以在一定条件下使用。
x = 1
是一个赋值表达式,其值为1
。 1
不是boolean
,因此不能在某种条件下使用。
答案 2 :(得分:1)
我不知道这种情况的意义,但理论上您可以使用以下构造:
import random
import string
main = sorted([''.join(random.sample(string.ascii_letters, 5)) for i in range(4000)])
L = [random.sample(main, 2000) for i in range(6000)]
%timeit t = isin_many_np(main, L)
6.67 s ± 121 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
%timeit r = isin_many_divakar(main, L)
2.17 s ± 50.5 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
%timeit s = isin_many_dict(main, L)
1.27 s ± 11.1 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
答案 3 :(得分:0)
如果结果(赋值为b的真值)等于true
编译错误,因为if()
在Java Only ACCEPTS布尔值中构造。但是x = 1
不能被评估为布尔值。评估值为1