在写代码的时候,常常使用if-else显得很麻烦,对于简单的赋值操作,我们可以使用三目运算符,但是与if-else比较的效率呢,不知道有没有人关注过。
现在来看看下面的测试:
public class Test1{
public static void main(String[] argv){
boolean b = true;
if(b){
b = false;
}else{
b = true;
}
}
}
public class Test2{
public static void main(String[] argv){
boolean b = true;
b = (b==true?false:true);
}
}
进行javap分析:
D:>javap -s Test1
Compiled from "Test1.java"
public class Test1 extends java.lang.Object{
public Test1();
Signature: ()V
public static void main(java.lang.String[]);
Signature: ([Ljava/lang/String;)V
}
D:>javap -s Test2
Compiled from "Test2.java"
public class Test2 extends java.lang.Object{
public Test2();
Signature: ()V
public static void main(java.lang.String[]);
Signature: ([Ljava/lang/String;)V
public class Test2{
public static void main(String[] argv){
boolean b = true;
b = (b ? false : true);
}
} }
D:>javap -c Test1
Compiled from "Test1.java"
public class Test1 extends java.lang.Object{
public Test1();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: iconst_1
1: istore_1
2: iload_1
3: ifeq
11
6: iconst_0
7: istore_1
8: goto 13
11: iconst_1
12: istore_1
13: return
}
D:>javap -c Test2
Compiled from "Test2.java"
public class Test2 extends java.lang.Object{
public Test2();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: iconst_1
1: istore_1
2: iload_1
3: iconst_1
4: if_icmpne
11
7: iconst_0
8: goto 12
11: iconst_1
12: istore_1
13: return
}
可见,进行的存储结构都相同,并且执行的指令条数也相同,只是执行过程中处理出现了一条语句的差异:
ifq还是if_icmpne,对于这两个,应该决定着效率问题,但是谁的更好呢?
增加:
根据下面回复的问题,确实有此种情况出现:
将Test2代码变化为:
public class Test2{
public static void main(String[] argv){
boolean b = true;
b = (b ? false : true);
}
}
则相应的javap分析变为:
D:>javap -c Test2
Compiled from "Test2.java"
public class Test2 extends java.lang.Object{
public Test2();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: iconst_1
1: istore_1
2: iload_1
3: ifeq 10
6: iconst_0
7: goto 11
10: iconst_1
11: istore_1
12: return
}
与Test1的比较得出:
D:>javap -c Test1
Compiled from "Test1.java"
public class Test1 extends java.lang.Object{
public Test1();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: iconst_1
1: istore_1
2: iload_1
3: ifeq 11
6: iconst_0
7: istore_1
8: goto 13
11: iconst_1
12: istore_1
13: return
}
解析过程中少解析了一条指令,但是执行的代码条数相同。
也就是说,这样的写法不会提高任何效率,但是Test2.java代码相对简洁一些。
查看了一下class文件,分别为315字节(Test1.class)和307字节(Test2.class),去除命名差异引起的字节变化,大概也就是多出来的那条指令所引起的。
OK??
分享到:
相关推荐
增值税减税到底谁受益?》对这些热点问题进行了深入的分析与探讨。 首先,专项债作为地方政府债务的重要组成部分,其资金的用途和效率直接关系到地方经济的发展质量和未来债务的可持续性。在2019年,专项债的投向...
如果写一个空循环,那种循环效率高? 你能深刻理解字符编码是怎么的吗? char 与 int 的有什么关系? 数组的初始化有哪些方式? 数组的存储原理是什么? 二维数组的有几种操作方式?。 数组名到底是什么? 字符串...
5.9 如果NULL和0作为空指针常量是等价的,那我到底该用哪一个呢? 5.10但是如果NULL的值改变了,比如在使用非零内部空指针的机器上,用NULL(而不是0) 不是更好吗? 5.11 我曾经使用过一个编译器,不使用NULL就...
5.9 如果NULL和0作为空指针常量是等价的,那我到底该用哪一个呢? 58 5.10 但是如果NULL的值改变了,比如在使用非零内部空指针的机器上,用NULL(而不是0) 不是更好吗? 58 5.11 我曾经使用过一个编译器,不...
o 2.5 关键字 auto 到底有什么用途? o 2.6 我似乎不能成功定义一个链表。我试过 typedef struct { char *item; NODEPTR next; } *NODEPTR; 但是编译器报了错误信息。难道在C语言中一个结构不能包含指向自己的指针...
很多网友非常不喜欢用ASP来编程,他们总是抱怨说ASP程序太慢,效率太低。...其实不能从 “认为” 这个角度来看问题 ,而应该从实际中看问题,...所以今天我们不会比较这三种WEB语言到底谁好,谁坏,而是讲解如何提高程
5.7 如果NULL 和0 作为空指针常数是等价的, 那我到底该用哪一个 呢? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 5.8 但是如果NULL 的值改变了, 比如在使用非零内部空指针的机器 上, ...
而技术的创新和业务的创新到底又是谁推动了谁?淘宝文件系统——TFS淘宝KV缓存系统——Tair第5章 分布式电子商务操作系统在飞速发展的背后,隐患已经埋下。在技术架构的制约下,团队协作越来越艰难,代码越来越臃肿...
以氮化镓(GaN)、碳化硅(SiC)和氧化锌(ZnO)为代表的宽禁带半导体是继硅和砷化镓(GaAs)之后的第三代半导体材料,具有高击穿电场、高饱和电子速度、高热导率、高电子密度、高迁移率等特点,可实现高压、高温、...
该报告旨在回答以下几个问题:到底是谁在引领中国企业的发展?中国企业不同层级的领导者为未来做好准备了吗?向上发展,领导力的瓶颈在哪里?不同行业如何更好地应对领导力挑战?什么样的发展举措是最为有效与高回报...
其主要优点是占用资源少、程序执行效率高。但是不同的CPU,其汇编语言可能有所差异,所以不易移植。 C语言是一种结构化的高级语言。其优点是可读性好,移植容易,是普遍使用的一种计算机语言。缺点是占用资源较多...
3. **团队建设**:“到底是谁的错?”提示我们在团队建设中,需要明确角色定位,理解每个人的能力和需求。人力资源部应协助各部门明确团队目标,培养团队精神,解决团队内部的分歧,以增强团队凝聚力。 4. **领导...
2. **项目经理:** 在一些专注于技术解决方案的公司中,项目经理可能会承担起需求分析的责任,特别是那些对技术实现细节有更高要求的项目。 3. **需求分析师:** 对于特定领域的深入需求分析,如数据需求分析、算法...
运行效率极高。 超强文件防盗功能:保护指定扩展名文件、保护指定整个目录下文件、也可以设置相应目录白名单、友情站点。 超强流媒体防盗功能:flash/图片/多媒体文件,您都可以安心地将这些文件放置在您的网站上...
特点与功能: 采用 C++ 纯 SDK 编写,运行效率极高。 不写注册表,不写启动项,纯绿色无污染软件。 超强文件防盗功能,保护指定扩展名文件、保护指定整个目录下文件、也可以设置相应目录白名单、友情站点。 超强流...
同时,流通速度也成为关键,谁能更快地将产品送达市场,谁就能抢占先机,赢得竞争优势。 3. 价值链竞争 企业应关注整个价值链,从研发、生产、分销到售后服务,每个环节都可能是决定胜负的关键。优化价值链,提高...
- **GAPS5.0 特点:** 恒生GAPS5.0是一款专注于金融行业的高性能、高可用的分布式平台,特别适合构建金融行业的中台系统。 - **技术创新点:** 介绍了GAPS5.0在安全性、稳定性等方面的创新技术,展示了其在中台架构...