两者之间有什么区别
boolean[] cameraPermissionGranted = {false};
和
boolean cameraPermissionGranted = false;
??
没有问题,都可以。 我只想知道例如内存的区别是什么。 关于性能问题有什么区别。
答案 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];
}