我想澄清一下我是否理解正确:
== - >是参考比较,即两个对象都指向相同的内存位置.equals() - >计算对象中值的比较我的理解是正确的吗?
可以==在Java中使用枚举,还是需要使用.equals()?在我的测试中,==总是有效,但我不确定我是否能保证这一点.特别是,.clone()枚举上没有方法,所以我不知道是否有可能得到一个枚举,其.equals()返回的值不同于==.
例如,这样就可以了:
public int round(RoundingMode roundingMode) {
if(roundingMode == RoundingMode.HALF_UP) {
//do something
} else if (roundingMode == RoundingMode.HALF_EVEN) {
//do something
}
//etc
}
Run Code Online (Sandbox Code Playgroud)
或者我需要这样写:
public int round(RoundingMode roundingMode) {
if(roundingMode.equals(RoundingMode.HALF_UP)) {
//do something
} else if (roundingMode.equals(RoundingMode.HALF_EVEN)) {
//do something
}
//etc
}
Run Code Online (Sandbox Code Playgroud) 合同equals与问候null,如下所示:
对于任何非空引用值
x,x.equals(null)应该return false.
这是相当奇特的,因为如果o1 != null和o2 == null,那么我们有:
o1.equals(o2) // returns false
o2.equals(o1) // throws NullPointerException
Run Code Online (Sandbox Code Playgroud)
这o2.equals(o1) throws NullPointerException是一件好事,因为它提醒我们程序员错误.然而,如果出于各种原因我们只是将其切换到了那个错误就不会被捕获o1.equals(o2),而这只会"默默地失败".
所以问题是:
o1.equals(o2)不应该return false投掷而不是一个好主意NullPointerException?anyObject.equals(null)总是扔掉,那会NullPointerException不是一个坏主意?Comparable相反,这就是Comparable合同所说的:
请注意,这
null不是任何类的实例,并且e.compareTo(null)应该抛出一个NullPointerException偶数e.equals(null)返回false.
如果NullPointerException适合compareTo,为什么不适合equals?
我想知道是否有可能检测到JavaFX 2中的双击?如何 ?
我想在点击和双击之间进行不同的事件.
谢谢
我注意到以下代码片段......
@Override
public boolean equals(Object otherObject) {
...
}
Run Code Online (Sandbox Code Playgroud)
......不允许的枚举,由于该方法equals(Object x)被定义为final在Enum.为什么会这样?
我想不出任何需要覆盖equals(Object)Enum的用例.我只是想知道这种行为背后的原因.
以此为例(摘自Java正则表达式检查程序不起作用):
while(!checker) {
matcher = pattern.matcher(number);
if(matcher.find())
checker = true;
else
year++;
}
Run Code Online (Sandbox Code Playgroud)
如果.equals(false)用来检查价值是否重要Boolean checker?
我知道有这是颇为相似.但是,显然这个问题涉及原始boolean而不是对象包装器Boolean; 因此,.equals()不适用.
还应该Boolean以不同的方式处理boolean?
我知道Java中的双重锁定已被破坏,那么在Java中使单例线程安全的最佳方法是什么?我想到的第一件事是:
class Singleton{
private static Singleton instance;
private Singleton(){}
public static synchronized Singleton getInstance(){
if(instance == null) instance = new Singleton();
return instance;
}
}
Run Code Online (Sandbox Code Playgroud)
这有用吗?如果是这样,它是最好的方式(我想这取决于具体情况,所以说明特定技术最好的时候会有用)
例如,我有一个枚举enum Color { Red, Brown }.我也有一些这种类型的变量:
Color c1 = Brown, c2 = Red
Run Code Online (Sandbox Code Playgroud)
比较常数值的最佳方法是什么:
if (c1 == Color.Brown) {
//is brown
}
Run Code Online (Sandbox Code Playgroud)
要么
if (c1.equals(Color.Brown)) {
//is brown
}
Run Code Online (Sandbox Code Playgroud) enum Drill{
ATTENTION("Attention!"), AT_EASE("At Ease");
private String str;
private Drill(String str){
this.str = str;
}
public String toString(){
return str;
}
}
public class EnumExample {
public static void main(String[] args) {
Drill d1= Drill.valueOf("ATTENTION");
Drill d2= Drill.valueOf("ATTENTION");
**System.out.println(d1.equals(d2));//TRUE
System.out.println(d1==d2);//TRUE**
System.out.println(Drill.ATTENTION.equals(Drill.valueOf("ATTENTION")));
System.out.println(Drill.ATTENTION.equals(Drill.AT_EASE));//FALSE
System.out.println(Drill.ATTENTION==Drill.valueOf("ATTENTION"));//TRUE
System.out.println(Drill.ATTENTION==Drill.AT_EASE);//FALSE
}
}
Run Code Online (Sandbox Code Playgroud)
使用==和equals()时的枚举行为似乎相同.根据我的知识,==只是检查参考.因此d1 == d2应为FALSE.任何人都可以解释这种行为为什么是真的?
以下比较使用以下两个枚举值==:
MyEnum enum1 = blah(); // could return null
MyEnum enum2 = blahblah() // could return null
if (enum1 == enum2) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
但是PMD 在第3行给出了CompareObjectsWithEquals警告:
使用equals()来比较对象引用