我看过这段代码,需要对“??”进行解释。我知道三元运算符,例如“?” 然后是 true 条件,“:”之后是 false/else 条件。但是双“??”是什么意思??
提前致谢
widget.secondaryImageTop ??
(widget.height / 2) - (widget.secondaryImageHeight / 2); ```
Run Code Online (Sandbox Code Playgroud) 我只是随机尝试查看是否new String();可以编译并且它确实可以编译(因为根据 Oracle 的 Java 文档“表达式、语句和块”,有效的语句类型之一是“对象创建”),
但是,new int[0];给了我一个“不是声明”的错误。
这有什么问题?我不是在创建一个数组对象new int[0]吗?
编辑:
为了澄清这个问题,以下代码:
class Test {
void foo() {
new int[0];
new String();
}
}
Run Code Online (Sandbox Code Playgroud)
在 上导致编译器错误new int[0];,而new String();其本身没有问题。为什么一个不可接受而另一个很好?
这是BouncyCastle 的 OpenBSD BCrypt 实现 v1.66 版本的“检查哈希值是否相等”代码:
for (int i = 0; i != sLength; i++){
isEqual &= (bcryptString.indexOf(i) == newBcryptString.indexOf(i));
}
Run Code Online (Sandbox Code Playgroud)
其中sLength保证为 60(参见第 268 行),并且 bcryptString 是完整的 openbsd 风格的 bcrypt 字符串,例如$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a.
错误在于所使用的方法:他们打算使用charAt.
此循环的目的是检查从 0 到 59 的每个位置,位置iin的字符是否与位置ina的字符相同。ib
但是,由于错误使用indexOf(int), 相反,这会检查unicode in的第一个字符的位置是否与 unicode in的第一个字符的位置匹配,其中 'not in string' 匹配 'not in string'iaib。
示例:"Hello".indexOf(101)返回1(java是从0开始的,101是unicode的e,e是第二个字符)。 …
java ×2
algorithm ×1
bouncycastle ×1
cryptography ×1
dart ×1
flutter ×1
math ×1
operators ×1
syntax ×1
ternary ×1