为什么两种情况的话就写 if{}else{} ? 不能写 if{}else if{} 吗?

苗小喵 发布于 02/07 16:51
阅读 704
收藏 0

例 1 :

 Integr a = 10;

if(a<10){

System.debug('a 的值 :'+a);       //不需要关注

}else if(a>=10){

System.debug('a 的值 :'+a);      //不需要关注

}

例 2 :

 Integr a = 10;

if(a<10){

System.debug('a 的值 :'+a);       //不需要关注

}else {

System.debug('a 的值 :'+a);      //不需要关注

}

这两种有什么区别吗?求大佬讲解一下

 

加载中
1
tcxu
tcxu

    如果 a 定义成 基本数据类型 int,
两个例子的结果一样。但 例1 情况,比例2,要多做一次 逻辑判断: if(a>=10)。 
例1 的 第二次逻辑判断是多余的。

    然而,楼主的案例中,变量 a   不属于基本数据类型 int, 而是 java.lang.Integer 类的一个实体, 因此 a, 作为 Integer 类的 一个 引用(ereference),除了正常情况下可以转换成 int 的值,再与 int 类的数据进行逻辑比较之外,还可能指空 (null)。a 若指空,则不能与 任何基本数据类型 int 的值进行比较,而产生运行时的异常而停机。即 考虑到 a == null 的情况,可否改写成:

import java.lang.*;
public class Coding {
public static void main(String args[]){
Integer a = null;
    if(a != null && a<10 ){
    System.out.println("a 的值 "+a);     
       }else if( a != null && a>=10 ){
    System.out.println("a 的值 "+a);   
	   } else  //此处不必再比较
       System.out.println("a 的值空 " + a);
    }
}

0
gammey
gammey

为什么要多判断一次?

0
F
Francesca

看你问这个问题应该是新手吧?

你这个问题就好比是 如果性别等于男则怎么怎么,否则就是怎么怎么样,和性别等于男则怎么怎么,否则如果性别是女则怎么怎么,你不觉得你多出来的那个判断有点多余了吗?

F
Francesca
回复 @tcxu : 这些毕竟都是少数。在通常意义上或者物理意义上,性别只有男和女两种,不考虑特殊情况,比如畸形、雌雄同体、心理性别等
tcxu
tcxu
我可能跑题了。这里说的是二元性别,指的是:认为人的性别非男即女。 有中性人吗? 中性人是怎么定义的? Facebook 有多种性别选项,无性别(Agender)、双性同体(Androgyne)、双性人(Bigender)、非常规性别(Gender Nonconforming)、性别存疑(Gender Questioning)、酷儿性别(Genderqueer)、间性人(Intersex)...
0
苗小喵
苗小喵

各位大佬,那只有两种情况时写 if(){}else{} 和 if(){}else if(){} 有什么性能上的差距吗?

gammey
gammey
如果只跑一次那没区别,问题是外面可能套了3-5个for,那就有区别了。 工作中你写的代码不知道之后会被别人怎么调用,加个for,高并发场景使用都会影响性能,养成良好的习惯,代码才能有良好的性能表现。
0
梅开源
梅开源

非黑即白的逻辑,只需要if else

即除了关注的一个关键判断外,其余一律简单处理就好

比如 if a<60 提示不及格 else 提示及格了

在原理上,计算机会把其余的计算全部走到else后面,无需多写

逻辑通常不是非黑即白,随时可能扩充

计算机判断if else是稳的,就怕对实际逻辑没把握清楚不止有两种可能

比如null值,不同类型的值(例如a字符串和数字比较),负数,溢出,未取到值。。。

0
苗小喵
苗小喵

好的,明白了,谢谢各位大佬了

0
HellerZhang
HellerZhang

if else 是两个选项, if else if是三个选项。其实后者隐藏了第三个选项,其内容就是什么都不做。

0
方棱
方棱

我会这样写:

}else{ // a>=10时

OSCHINA
登录后可查看更多优质内容
返回顶部
顶部