`
laodizhuq
  • 浏览: 26118 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

代码优化5-if条件判断的陷阱

阅读更多
最近看到一个公司底层代码中这样写到
	public boolean match(FeatureSupportDO f) {
		boolean ret = false;
		if (null != f) {
			if (null != f.getFeature(this.key) 
					&& (null == this.value 
							|| this.value.equals(f.getFeature(this.key).getValue()))) {
				ret = true;
			}
		}
		return ret;
	}

这个if中有两次出现了“f.getFeature(this.key)”,那么java会不会执行两次这个方法呢?
我们写了一个测试类来检测一下:
public class Test {
	
	public static void main(String[] args) {
		A a = test.new A("1");
		if(a.getP() != null && (1!=1 || a.getP().equals("1"))) {
			System.out.println(a.getV());
		}
	}
	class A{
		private A a;
		private String p;
		int v = 0;
		public A() {
			
		}
		
		public A(String p) {
			this.p = p;
		}

		public String getP() {
			v ++;
			return p;
		}
		public int getV() {
			return v;
		}
	}
}


输出结果是 "2"
这说明if中多次出现的方法,并不会在编译期进行优化,所以当碰到这种情况时,我们做如下修改:
   public boolean match(FeatureSupportDO f) {
      if (null != f) {
         FeatureDO feature = f.getFeature(this.key);
         if (null != feature 
               && (null == this.value 
                     || this.value.equals(feature.getValue()))) {
            return true;
         }
      }
      return false;
   }


当然如果这个getFeature只是简单的return一个属性,那么这个修改的意义并不是很大。
偏偏这个基础类中的方法并非如此,实现中还有递归调用等处理。
0
0
分享到:
评论

相关推荐

    游戏学习中陷阱制作的代码

    10. **调试和优化**:最后,陷阱的代码需要经过调试确保其工作正常,并进行性能优化,避免影响游戏的整体运行效率。 在期中考中,学生可能会被要求设计并实现一个简单的陷阱系统,涵盖上述的一些或全部知识点。通过...

    代码大全第二版

    - **布尔表达式语法**:探讨了C++中布尔表达式的语法及其在条件判断中的作用。 - 出现位置:442-443 - **参数传递方式**:讲解了在C++中如何通过引用或值来传递参数,并讨论了它们之间的区别及适用场景。 - 出现...

    python学习笔记与简明教程.docx

    - 嵌套条件判断中的逻辑陷阱 #### Python 第25课:初探List - **知识点**: - 列表的基本概念与创建 - 列表的主要操作(增删改查) - 列表与其他数据结构的区别 #### Python 第26课:操作List - **知识点**: ...

    算法-判断数正负(信息学奥赛一本通-T1039)(包含源程序).rar

    在提供的压缩包文件中,包含了"算法-判断数正负(信息学奥赛一本通-T1039)(包含源程序).pdf",这可能是一份详细的解答指南,包含了问题的详细描述、解题思路、可能的陷阱以及示例源代码。通过阅读这份文档,参赛...

    湖南省计算机考试C语言机考试题.pdf

    - if-else语句用于根据条件执行不同代码块。 - 函数调用用于模块化代码,提高代码可读性和复用性。 9. **文件操作**: - 题目未提及,但在实际考试中可能需要读取或写入文件,如输入输出题目数据。 10. **调试...

    3D图形库背面消隐的三大陷阱示例源代码

    总之,理解并处理好3D图形库背面消隐的这三个陷阱,有助于优化渲染性能,提升3D场景的显示效果。正确实现背面消隐,不仅可以减少不必要的计算,还能避免产生透视错误,为用户呈现更真实、流畅的3D世界。

    Java An Introduction to Problem Solving and Programming

    - 基本形式:`if (条件) { ... } else if (条件) { ... } else { ... }` - 可以有多个`else if`分支。 - **应用场景**: - 根据用户的输入执行不同的操作。 - 对数值范围进行分类处理。 #### 2. 使用switch语句...

    C语言进阶(含代码)

    - **条件分支的高级技巧**:如`if...else`、`switch...case`语句,进阶学习应关注如何优化条件判断,减少代码冗余,提高程序性能。 #### 7. 动态内存管理 - **内存分配与释放**:掌握如何使用`malloc`、`calloc`、...

    python基础教程

    - 如何优化嵌套条件语句以提高代码质量。 ##### 24. list - **内容概述**:介绍Python中列表的基本操作。 - **关键知识点**: - 列表的创建和索引访问。 - 列表的追加、插入、删除等操作。 - 列表的排序和反转...

    T-SQL编程大全完全解析

    5. **CASE多分支语句**:CASE表达式提供了一种在SQL中进行条件判断的方法,可以依据不同条件返回不同的值。这对于数据处理和报告生成非常有用,可以简化复杂的逻辑判断。 6. **批处理语句**:批处理是指将多个SQL...

    Python基础教程(crossin全60课)

    - 嵌套条件语句的优化策略。 - **【Python第25课】初探list** - **主要内容**:介绍Python中的列表数据类型。 - **知识点**: - 列表的创建与索引; - 列表元素的增删改查操作; - 列表与其他数据结构的区别...

    华为OD机试C卷- 机器人走迷宫(Java & JS & Python).md-私信看全套OD代码及解析

    ### 华为OD机试C卷 - 机器人走迷宫...以上代码通过深度优先搜索的方法实现了对房间内所有方格的可达性的判断,进而能够计算出陷阱方格和不可达方格的数量。在实际应用中,可以根据题目要求进一步优化代码,提高效率。

    优化秘籍:C语言预处理器宏的高级应用

    在代码优化中的应用 - **条件编译**:条件编译可以根据不同的编译条件来包含或排除代码段。例如,在调试模式下打印调试信息: ```c #define DEBUG_MODE #include int main() { #ifdef DEBUG_MODE printf...

    高质量C++_C编程指南

    - **for循环控制变量**:for循环的初始化、条件判断、更新操作应简洁明了。 - **switch语句**:利用switch语句进行多条件分支选择,增强代码可读性。 - **goto语句**:谨慎使用goto,避免程序结构混乱。 ### 内存...

    c语言实现的超级玛丽游戏源码.zip

    在本压缩包“c语言实现的超级玛丽游戏源码.zip”中,包含了使用C语言编写的超级玛丽游戏的完整源代码。C语言是一种强大的、低级的编程语言,常用于系统编程、游戏开发以及各种嵌入式应用。下面将详细讨论这个项目中...

    林锐 高质量C++

    - **条件语句**:讨论if语句的使用技巧,如条件判断的优化。 - **循环语句效率**:分析不同循环语句(如while、for)的特点,选择最合适的循环结构。 - **循环控制变量**:建议for循环中循环变量的管理方式,提高...

    高质量C++编程指南

    - IF语句:强调了条件判断的清晰性和简洁性。 - 循环语句效率:分析了不同循环结构(如for、while)的性能差异和适用场景。 - FOR循环控制变量:讨论了循环变量的选择和初始化的最佳实践。 - SWITCH语句:提供了使用...

    BasmForBeginners-cn

    - **优化技巧**:除了基础语法之外,还涵盖了大量关于代码优化的内容,帮助读者写出更加高效、精炼的汇编代码。 - **Delphi集成**:特别强调了BASM与Delphi环境的结合使用,这使得教程不仅适用于纯汇编语言的学习,...

    c语言面试指导

    - **强大的控制结构**: 支持结构化的编程方法,包括条件判断、循环等,使得代码更易于理解和维护。 - **高效性**: 编写的程序通常比其他高级语言运行速度更快,且占用内存较少。 - **可移植性**: C语言的标准库...

    c语言-下一百层游戏

    3. **条件判断**:每一层可能有不同的挑战,需要通过条件语句(if-else)来决定游戏行为。 4. **函数**:将游戏的不同部分封装成函数,如`move_player()`、`check_level_status()`等,使代码结构清晰,易于维护。 ...

Global site tag (gtag.js) - Google Analytics