今天的地铁思索让我想起一个之前学C语言的时刻一直没有验证的事情:既生瑜何生亮?
- 平时写代码的时刻,似乎并没有太多的关注我应该选用什么条件判断语句,感受判断条件或者两条支路语句庞大就本能地if-else。
遇到一些数值,字符的按条件赋值输出,就感受if-else与这些简短语句气质不符,于是就用了三目运算符,使代码更简练舒适。那么为什么有了if-else还要用?:呢,只是为了代码更简练吗,照样有什么不为人知的隐秘[/嘿嘿] - 我计划稍稍探寻一下,从两个方面来聊聊:效率和三目运算符的表达式特征
关于执行效率
- 我在网上一直没有找到可靠的说辞或指南,有的说三目运算符效率高,另有的说一样的,以是我来测测(测试环境可能由于我的电脑性能,给定参数缘故原由,不能得出确切的结论,仅供参考)
- if-else
public static void main(String[] args) {
int num=1000;
System.out.println("if-else 运行时间:");
long totalTime=0L;
for (int i = 1; i <=10 ; i++) {
long startTime = System.nanoTime();
if (num>500&&num%3!=0&&num/10==100){
num=1001;
}else{
num=0;
}
long endTime = System.nanoTime();
long result = endTime - startTime;
totalTime+=result;
System.out.println("第"+i+"次: " + result + " 纳秒");
}
System.out.println("平均时间为:"+totalTime/10+"纳秒");
}
-
执行效果:
-
三目运算符 ? :
public static void main(String[] args) {
int num = 1000;
System.out.println("? : 运行时间:");
long totalTime = 0L;
for (int i = 1; i <= 10; i++) {
long startTime = System.nanoTime();
num = num > 500 && num % 3 != 0 && num / 10 == 100 ? 1001 : 0;
long endTime = System.nanoTime();
long result = endTime - startTime;
totalTime += result;
System.out.println("第" + i + "次: " + result + " 纳秒");
}
System.out.println("平均时间为:" + totalTime / 10 + "纳秒");
}
- 执行效果:
- 从结论上来看,平均执行时间并没有太大差距,究竟这里是以纳秒为单元,以是,暂且以为
? :
仅仅是简化代码的吧 -
若是哪位大佬有专业的权威的看法,请一定来“拍一拍”我,让我的石头落下。
表达式特征(BNP : binary numeric promotion)
-
二进制数值提升
- 在三目运算符中的第二和第三表达式的类型依据数值局限大的谁人,将一个小数值的类型局限扩大,好比16位提升到32位,32位到64位,直观一点就是short提升到int,int提升到long,差别类型之间也可以提升,然则纷歧定是往两个其中的一个走,也有short和char,最终表达式是int的情形。 -
举几个栗子就比较清楚了
- 1,参数是int和byte,然则整个表达式的类型却是int
- 2,参数:int,char 表达式类型:int  - 3,参数:short,char 表达式类型:int  - 4,参数:int,float 表达式类型:float (若是字节数相同,会提升到浮点数)  - 5,参数:int,long 表达式类型:long  - 6,参数:long,double 表达式类型:double (若是字节数相同,会提升到浮点数)  - 7,同上的包装类,包装类在运算时自动拆箱,和基本数据类型效果无异  - 8,更详细一点 ``` int number = 1000; System.out.println(number<0?10.0:9); ``` console: 
总的来看,if-else和三目运算符并没有在今天分出输赢,我们依然可以根据之前的习惯写代码,只是让我们之后写代码的不用再犹豫和纠结用什么好,不用再想起他们俩之间的纠葛。在现实生产环境中根据各自团队规范来就好。这些也是最近才发现的,虽然感受很少用到,但这不是目的。我们遇到的器械那么多,不会每样都能用到你的程序里,只是为了在下次遇到此类问题Bug时,能够游刃有余,这就是我们程序员鸭,突然感受这篇文章啥也没做,然则却也不是啥也没做,哈哈新鲜咧。
- 参考文档:Java语言规范--https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-ConditionalExpression
,至此,若有纰漏,望列位不吝赐教
欢迎进入欧博官网(Allbet Game):www.aLLbetgame.us,欧博官网是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。
网友评论
最新评论