关于if else和初始化的Java指南

时间:2014-05-20 12:49:07

标签: java if-statement boolean

我有一个布尔值来初始化,具体取决于条件。我想知道最好的方法是什么,如果有的话,根据代码优化,或者只是个人品味的问题。

#p>方式#1:

boolean conditionIsTrue;
if(object == whatItShould){
    conditionIsTrue = true;
} else {
    conditionIsTrue = false;
}

方式#2:

boolean conditionIsTrue = false;
if(object == whatItShould){
    conditionIsTrue = true;
} 

编辑:我不是在寻找用object.equals或其他方法更改代码的替代方法,这个条件是一个例子,通常它们更复杂。我想做的只是#1和#2之间的最佳方式。

4 个答案:

答案 0 :(得分:3)

假设objectwhatItShould是原始类型并且可以使用==进行比较,则应使用==

conditionIsTrue = (object == whatItShould);

假设objectwhatItShould是对象引用,您应该使用equals方法:

conditionIsTrue = (object.equals(whatItShould));

请注意,equals方法(如果未被覆盖)将使用==结束比较参考。


从你的编辑:

  

我不是在寻找用object.equals或其他方法来改变代码的替代方法,这个条件就是一个例子,通常它们更复杂。我想做的只是#1和#2之间的最佳方式。

您应该准确发布您正在寻找的内容,因此特定编程问题不会有任何双重解释。

无论如何,您可以使用默认值初始化变量,并在几个条件之后定义实际值(使用int变量,因为boolean具有误导性):

int myVariable = 0;
if (<condition1> && <condition2> &&
        (<condition3> || <condition4>) ...) {
    myVariable = //real value
}

这样,如果并非所有路径都相应地初始化变量,则可以避免编译器问题,这可能在使用第一种方法时发生。

但是,如果您的条件只有一行,那么使用Ternary Operator会更好:

int myVariable = (condition1> && <condition2> &&
                  (<condition3> || <condition4>) ...) val1 : val2;

此外,您可以嵌套三元运算符,以防有多条路径:

int myVariable = (<condition1>) ?
    val1 : (<condition2> && <condition3>) ?
        val2 : val3;

答案 1 :(得分:1)

第一种方式对我来说更好看。 条件及其后果是明确的,您确定只做一项任务。所以你的变量也是最终的。 但是,它并不是表现的灵丹妙药。

答案 2 :(得分:0)

执行此操作的正确方法是使用object.equals(anotherobject);。您可以使用"A" == "A"String a = "A"; a.equals("A");

轻松测试使用字符串执行此操作的原因

答案 3 :(得分:0)

我认为你正在努力避免这种结构(最佳版本),这可能会让人感到有些困惑

boolean conditionIsTrue = object == whatItShould; //usual disclamer about this testing reference equality not value equality for objects

这个,我接受看起来有点......第一次观看时很奇怪,===在附近。但是,您可以自由修改它,使其看起来更令人愉悦:

boolean conditionIsTrue= (object == whatItShould);

此外,对于更复杂的条件,您可以根据需要使用换行符

boolean conditionIsTrue= 
         object == whatItShould ||
         object == alternative ||
         (useBadAlternative && object == badAlternative);

条件变得越复杂,就越不喜欢没有if语句悬挂在它背后。

优化注意事项

你提到优化;当我正在优化时,我尽量删除if语句(甚至是合理的语句);它们是分支指令,可以减慢处理器的速度,因为管道不会提前知道代码将关闭哪个分支(it does try to guess但它经常会出错)。假设你关心代码效率(也就是这个瓶颈),而代码优化意味着加速'冗余if'会让你失望(假设智能编译器不会删除它)