分配布尔值将返回布尔值,但不分配整数。为什么?

时间:2019-09-16 08:10:36

标签: java integer boolean

以前我在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");
    }   
}

4 个答案:

答案 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是一个赋值表达式,其值为11不是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)

如果结果(赋值为b的真值)等于true

,请运行以下代码段

如果(x = 1)

编译错误,因为if()在Java Only ACCEPTS布尔值中构造。但是x = 1不能被评估为布尔值。评估值为1