`

java条件表达式陷阱

阅读更多
在开发中,遇到条件表达式,空指针报错,但条件已经判断了非空情况(误以为是对象为空)

示例:
ChildLog childLog = new ChildLog();
		childLog.setName("");
		childLog.setValue("");
		
		
		Long assetsIdCtm1 = childLog.getAssetsid();
		Long id = (null != childLog 
				&& !"12".equals(childLog.getStatusassets())) 
				? childLog.getRefid() 
						: 0l;


此例子中,判断了null != childLog   但是childLog.getRefid()仍然报空指针异常

将编译的class文件反编译:
Long id = Long.valueOf((childLog != null) && 
      (!"12".equals(childLog.getStatusassets())) ? 
      childLog.getRefid().longValue() : 
      0L);


由此可见,当变量类型是Long,且是条件表达式赋值时,会将条件表达式转换为Long(Long.valueOf)。外面套一层Long.valueOf后,如果返回为null,转换就会报错


分享到:
评论

相关推荐

    java解惑 java 表达式谜题 java 字符谜题 java 循环谜题 java 异常谜题

    Java表达式是程序中进行计算的部分,它们可以是简单的变量引用,也可以是复杂的运算组合。在Java中,理解操作符优先级和类型转换是解决表达式谜题的关键。例如,`==`用于比较两个对象是否相等,而非赋值;`+=`是复合...

    Java基础方面陷阱.

    Java作为一门广泛使用的编程语言,其基础知识的掌握对于程序员来说至关重要。然而,即便是经验丰富的开发者也可能在...本资源的"01第一讲:Java基础方面陷阱"应包含了对这些知识点的详细讲解,值得Java程序员学习参考。

    java常见疑惑与陷阱

    ### Java常见疑惑与陷阱 #### 一、Java基础的常见陷阱 **1.1 不一样的数字的宽类型和窄类型** 在Java中,当我们处理不同的数值类型时,可能会遇到一些意料之外的行为。例如,当一个`byte`类型的数据与一个`int`...

    java中的问号表达式视频教程

    Java中的问号表达式,通常被称为三元运算符或条件运算符,是Java编程语言中一个简洁的语法结构,用于根据条件返回一个值。在Java中,问号表达式具有以下形式:`条件 ? 结果1 : 结果2`。这个表达式会先评估条件,如果...

    java面试中的陷阱java面试中的陷阱

    ### Java面试中的陷阱知识点解析 在Java面试过程中,面试官往往会通过一些问题来考察应聘者对Java基础知识的理解深度以及在实际编程中解决问题的能力。本文将根据提供的标题、描述及部分内容,整理并归纳出一系列...

    java程序员面试陷阱

    13. **Lambda表达式与函数式编程**:Java 8引入了Lambda表达式,它简化了匿名内部类的使用,使得函数式编程成为可能。理解Lambda的语法、函数式接口和Stream API的使用是现代Java开发的基本要求。 14. **Junit与...

    Java程序员面试陷阱大全

    - 断言用于调试阶段验证假设条件,如果断言表达式为`false`,将抛出`AssertionError`异常。 - 断言的使用需在编译时通过`-ea`参数开启,运行时也可以通过系统属性控制断言的启用与禁用。 #### 6. 垃圾回收(GC)的...

    java面试陷阱题

    12. **Lambda表达式与函数式编程**:理解Java 8引入的Lambda表达式的语法和用途,以及Stream API的使用。 13. **注解(Annotation)**:理解注解的基本用法,知道自定义注解和元注解,以及注解处理器的应用。 14. ...

    正则表达式经典实例

    4. **高级特性详解**:深入探讨了更复杂的正则表达式特性,如回溯控制、条件匹配、命名捕获组等,并通过具体例子展示如何利用这些特性编写更高效、更灵活的正则表达式。 5. **解决常见问题**:针对性能不佳、误报、...

    正则表达式傻瓜式宝典

    10. **常见问题与陷阱**:正则表达式中的常见错误和陷阱,如无限循环、贪婪与懒惰量词的区别,以及如何避免这些问题。 "正则表达式傻瓜式宝典"作为一本面向初学者的指南,应该以浅显易懂的方式,通过丰富的示例和...

    正则表达式系统教程CHM

    7. **正则表达式引擎**:讨论不同的正则表达式引擎(如Perl兼容、ECMAScript等)的差异,以及它们在不同编程语言(如JavaScript、Python、Java等)中的实现。 8. **实例解析**:提供大量实际例子,帮助学习者通过...

    正则表达式素材5

    9. **在不同环境中的应用**:了解JavaScript、Python、Java、Perl等语言中正则表达式的异同,有助于更好地适应不同的编程需求。 通过学习上述知识点,结合《正则表达式入门经典》和“正则表达式解释器实现原理”,...

    精通正则表达式(第三版)简体中文.pdf

    5. **正则表达式引擎的差异**:书中讨论了不同的正则表达式引擎(如Perl、JavaScript、Java、.NET等)之间的差异,这对于跨平台开发或使用不同语言的开发者来说非常重要。 6. **实战应用**:书中包含大量实例,涵盖...

    JAVA面试陷阱(网摘)

    【JAVA面试陷阱详解】 在Java面试中,面试官常常会设置一些陷阱问题,考察候选人的基础知识和理解深度。以下是一些常见的陷阱问题及其解析: 1. **final, finally, finalize的区别** - `final`:这是一个修饰符,...

    详解java中的正则表达式

    Java中的正则表达式是用于字符串处理的强大工具,它允许开发者定义搜索模式,这些模式可用于...通过示例代码和细致的解释,本文深入讲解了Java正则表达式的使用方法和常见陷阱,帮助开发者在实际应用中更加得心应手。

    Java面试中的陷阱

    Java面试中的陷阱往往涉及到对语言核心概念的深度理解,这些陷阱涵盖了从基本语法特性到高级设计模式的应用。面试官通常会通过一些看似简单但实际上需要深入理解的问题来测试候选人的技能和经验。 首先,我们来看看...

Global site tag (gtag.js) - Google Analytics