- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有问题的行是 return pFile.exists() ?真:空;
。由于它不会引发任何编译错误,对此有何解释。它最终引发了 NPE
。
import java.io.File;
public class Main {
public static void main(String... args) {
boolean accept = accept(new File(""));
System.out.println("accept = " + accept);
}
public static boolean accept(File pFile) {
System.out.println(pFile.exists()); // prints: false, so pFile is not null
return pFile.exists() ? true : null; //this line should throw compilation error
}
}
pFile
不是null
;如您所见,File
已实例化。但显然该文件不存在。问题不在于 pFile
。我对运算符(operator)如何处理 null
很感兴趣。
最佳答案
你的代码相当于:
public static boolean accept(File pFile) {
System.out.println(pFile.exists()); // prints: false, so pFile is not null
Boolean tmp = pFile.exists() ? true : null;
return (boolean) tmp;
}
换句话说,在这种情况下,条件运算符的类型是Boolean
,然后将值拆箱以返回boolean
。当 null
被拆箱时,你会得到一个异常。
来自 section 15.25 Java 语言规范:
Otherwise, the second and third operands are of types S1 and S2 respectively. Let T1 be the type that results from applying boxing conversion to S1, and let T2 be the type that results from applying boxing conversion to S2. The type of the conditional expression is the result of applying capture conversion (§5.1.10) to lub(T1, T2) (§15.12.2.7).
我相信这就是适用于此的情况,尽管我承认它并不像它可能的那样清楚。
关于java - 需要解释 : ternary operator in java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7466669/
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题吗? 更新问题,以便 editing this post 提供事实和引用来回答它. 关闭 2 年前。 Improve
任何人都有记住标准三元语法的好技巧吗? 具体是否为“?”或':'优先。这些年来,我一直在退缩。 最佳答案 您要检查的条件有点像一个问题,因此问号位于第一位。 x > 0 ? 1 : 0 将此语句视为三
我正在使用DLR在C#中实现语言解释器,并且在使用三元运算符时遇到了一些麻烦。至此,我已经实现了基本的函数声明/调用,如下所示: F := (x) -> x + 1 F(1) # returns
如何扩展原本用于二元运算符以支持条件三元运算符 ("a ? b : c") 的调车场算法?我在这里没有看到这个问题的答案,但我有一个,所以我发布了它。 最佳答案 我的做法是添加三个新的运算符: >“?
我正在寻找一种优雅的方式来选择方法签名(重载)并根据条件传递参数。我有一个导入器,它要么生成要导入的最新文件,要么采用显式数据路径。 目前我的代码如下所示: if (string.IsNullOrEm
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
这个问题有点抢先,因为 php 7 还没有发布。我很好奇在三元运算符的上下文中如何处理飞船运算符。 所以如果我有一个前宇宙飞船的三元表达式,例如: $foo = 1; $bar = 0; echo '
在 PowerShell 中执行此操作的正确方法是什么? $action = if ($args.Length > 0) { $args[0] } else { Read-Host 'Action'
与标准 if-else 语句相比,?: 运算符有哪些优点和缺点。最明显的是: 条件?:运算符 处理直接值比较和赋值时更短、更简洁 似乎不像 if/else 结构那么灵活 标准 If/Else 可以应用
如何将多个值赋给三元运算符?那不可能吗?我这样试过,但出现错误: size === 3 ? ( var val1=999, var val2=100; ) : 0; 和 size === 3 ?
目前我正在使用: input = input ? input : 'splash'; 我知道这太冗长了。 执行此操作的更短方法是什么? 最佳答案 您可以使用“逻辑或分配”并使其更短: input =
三元运算符通常只是哲学讨论的主题:是否 a=b>5?1:0; 对来说更具可读性、更快、更酷 if(b>5) { a=1; } else {a=0;} (带或不带花括号)我通常不在乎。我喜欢我的三元运算
我想这是一个非常基本的问题,我只是想知道如何阅读这段代码: return someboolean ? new someinstanceofsomething() : someotherboolean
与标准 if-else 语句相比,?: 运算符的优点和缺点是什么。显而易见的是: 条件 ?: 运算符 在处理直接值比较和赋值时更短、更简洁 似乎不如 if/else 结构灵活 标准 If/Else 可
这个问题在这里已经有了答案: How to write ternary conditional operator? (33 个答案) 关闭6年前。 所以在 java 中我们有三元运算符 (?),它有时
我正在使用 React.js 开发一个项目,但我在使用 eslint 时遇到了错误: 不要嵌套三元表达式 这是我的代码: const MyApp = () => { return ( <> {(var
我正在使用 #version 120 将 WebGL GLSL 着色器移植到 OpenGL GLSL 桌面. 是否有任何扩展可以增加对 ?: 的支持?三元运算符? 像: #extension GL_E
有问题的行是 return pFile.exists() ?真:空;。由于它不会引发任何编译错误,对此有何解释。它最终引发了 NPE。 import java.io.File; public clas
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 7 年前。 Improv
ESLint 在我的 JS 模块中告诉我此错误消息:错误 no-unneeded-ternary Unnecessary use of Conditional Expression for defau
我是一名优秀的程序员,十分优秀!