布尔boolean [] b = {false}与布尔b = false的区别?

时间:2019-01-04 17:18:53

标签: java arrays boolean

两者之间有什么区别

boolean[] cameraPermissionGranted = {false};

boolean cameraPermissionGranted = false;

??

没有问题,都可以。 我只想知道例如内存的区别是什么。 关于性能问题有什么区别。

4 个答案:

答案 0 :(得分:4)

boolean[] cameraPermissionGranted = {false};创建一个布尔数组,它的第一个元素是false

boolean cameraPermissionGranted = false;创建一个布尔变量,其值为false

答案 1 :(得分:3)

这两者之间的主要区别在于

boolean[] cameraPermissionGranted = {false};

是一个数组,该数组保留当前boolean类型的数据,该数据目前已由单个元素false初始化,除非在

时调整大小(重新初始化)。
boolean cameraPermissionGranted = false;

只是一个初始化为false的属性,之后可以更新。


我想到的一个非常直观的示例就是在lambda的用法:

boolean[] cameraPermissionGranted = {false};
boolean cameraPermission = false;
List<Integer> list = new ArrayList<>();
list.forEach(a -> {
    cameraPermissionGranted[0] = true; // effectively final
    // cannot use cameraPermission
});

答案 2 :(得分:3)

第一个创建单个元素的布尔数组,另一个创建一个布尔类型。

前者通常用于需要final和需要修改元素的地方,例如闭包,尽管现代Java版本引入了其他更具可读性和较少颠覆性的技术。它在某种程度上也类似于C ++的引用类型:您可以将数组引用传递给函数,并且该函数可以修改数组元素,并且调用者可以看到这种修改。

答案 3 :(得分:0)

使用第一个的一个原因是模仿C ++的按引用传递。考虑一下C ++中的以下示例:

void toggleValue(bool &b){
    b = !b;
}

在Java中似乎很难做到这一点,因为您不能通过引用传递参数。但是使用单例数组,您可以模仿相同的行为:

private void toggleValue(boolean[] b){
    b[0] = !b[0];
}