2014-12-06 51 views
3

我已经与C#稍微休息一下后,返回到的Java的时候,我已经厌倦了写东西一样a.equals(b),所以我在想,等于有办法使用==运算符而不会破坏我的程序。==还是比较最终静态字段

这里是我的情况:

public static class A { 
    public final static A STATIC_FIELD = new A(prop1, prop2); 

    public A method(int param){ 
     return (param > 0.5) ? STATIC_FIELD : new A(prop1, prop2); 
    } 
} 

现在,我可以在下面的代码片段与==取代equals,因为我指的是同一个对象还是错?

.... 
private bool method(){ 
    A aInstance = getAInstance(); 
    int param = Math.Random(); 
    return aInstance.method(param).equals(A.STATIC_FIELD); 
} 
.... 

什么,如果STATIC_FIELD在从enum采取了价值?

回答

0

如果您不覆盖equals()方法,则equals()==执行同样的操作,请检查引用的相等性。你可以在这种情况下进行替换,因为如果它为true,method()将返回与A.STATIC_FIELD相同的引用。见this answer

1

你应该避免==(好吧,让我们同意,你知道它:-)),也相对于独居情况下,你可能会“忘记”后来,它是通过单创建。但我会给你一个提示。相反的:

if ((var != null) && (var.equals(A.STATIC_FIELD))) 

你可能会写:

if (A.STATIC_FIELD.equals(var)) 

就像许多人没有意识到,比较字符串他们可能会使用:

if ("static string".equals(varString)) 

您也可以使用的java.util .Objects.equals比较对象而没有检查这些空值的负担。

3

这取决于你想要做什么。

如果需要检查,如果这是完全一样的对象,请使用直接比较。如果您需要检查对象是否包含相同的内容(如字符串或数字),则应使用.equals。

这些方法

最常见的错误似乎与字符串比较,其中.equals如果字符串有相同的内容,但==只有当这是字符串相同的实例返回true,返回真来了。

0

不,你不能使用==代替equals()方法监守当我们使用==在Java中,我们实际上是比较对象的内存地址,因此,如果该方法返回STATIC_FIELD然后它会正常工作,其静态对象而且地址在任何地方都是一样的。 但当方法将返回的则新对象的地址不会匹配,即使内容是类中相同的,因为新的A(参数1,参数2)坚持JVM在不同的存储位置,以创建新的对象

+0

但是在这里,method()不返回A的新实例(当为true时),它返回静态字段。 – 2014-12-06 18:47:47

+0

只有当参数值大于.5时才会返回STATIC_FIELD,否则它将返回一个新对象 – varun 2014-12-06 18:49:56

+0

如果你认为它总是真的,那么你可以使用==。但它总是更好地使用等于对象 – varun 2014-12-06 18:52:26

0

==检查两个对象是否是相同的实例。如果你想检查两个变量是否持有相同的实例(因为它们可能是你将变量分配给类常量),==可以使用。如果您的变量碰巧保留了null,那么它也不会出错,所以它的收益超过.equals()

enum的实例是始终不变,和两个不同情况永远是平等的,所以==是罚款太使用这些。

相关问题