targetPixValList是一个包含Double对象的列表,它在列表中的连续位置也包含类似的值,当我尝试使用Code_1比较两个Double值时,cnt返回零.当我使用code_2时,cnt返回值.
并且列表的类型是
为什么"=="运算符不适用于Double?
Code_1:
int cnt = 0;
for (int i = 0; i < cs.targetPixValList.size()-1; i++) {
if (cs.targetPixValList.get(i) == cs.targetPixValList.get(i+1))
++cnt;
}
Run Code Online (Sandbox Code Playgroud)
CODE_2:
int cnt = 0;
for (int i = 0; i < cs.targetPixValList.size()-1; i++) {
if (cs.targetPixValList.get(i).equals(cs.targetPixValList.get(i+1)))
++cnt;
}
Run Code Online (Sandbox Code Playgroud) 我们知道==比较参考文献并equals()比较内容.但在检查Object类中的equals()实现后,我感到很困惑.实施是,
public boolean equals(Object obj) {
return (this == obj);
}
Run Code Online (Sandbox Code Playgroud)
正如你看到的实现.equals内部呼叫==运营商.然后它有何不同?
我已经坚持了一段时间了,实际上我有两个对象,根据我的相同,我已经覆盖了hashCode方法来为两者创建相同的哈希码,当我使用"=="比较它们是否相等时对象的等于(它也使用"=="),它向我返回false,下面的场景应该完全解释:::
1)HashCode-->-626561382 AND 2)HashCode--->-626561382
1)IdentityHashCode-->19640463
2)IdentityHashCode-->22330755
1)Bean1=beans.OrdersBean@daa76e9a AND 2)Bean2=beans.OrdersBean@daa76e9a
Check MySelf for(==)-->false
Check Object's Equals()-->false
Run Code Online (Sandbox Code Playgroud)
请你解释一下为什么会这样?????
所以,我正在尝试开发一个在我输入的时候打开JDialog的应用程序.它只需要精确到一秒钟.
public void run() {
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
timeset = "16:37";
while(true){
System.out.println("thread sleep");
try{Thread.currentThread().sleep(1000);}catch(InterruptedException ie){}
Calendar cal = Calendar.getInstance();
cal.getTime();
temptime = sdf.format(cal.getTime());
System.out.println("realtime = " + realtime);
System.out.println("timeset = " + timeset);
if(realtime == timeset){
System.out.println("if statement activated");
Alert.man();
break;
}
Run Code Online (Sandbox Code Playgroud)
所以,我的问题是当我运行程序时if语句在timeset和realtime相等时没有运行,我只是想不出来.这是怎么回事?
我有以下代码:
Circle c1 = new Circle();
Circle c2 = new Circle();
System.out.println(c1 == c2);
Run Code Online (Sandbox Code Playgroud)
False按预期方式输出哪些产出.这是因为c1并且c2是引用类型和"=="检查它们是否引用相同的类型(它们不是).
但是,我最近试过这个:
String a = "hello";
String b = "hello";
System.out.println(a == b);
Run Code Online (Sandbox Code Playgroud)
由于某种原因输出True.为什么是这样?String是引用类型,a并且b指向不同的内存位置.我总是被告知你需要使用.equals()它来工作,这不是!
更新
这不是重复!我知道比较字符串的正确方法是使用.eqauls()
更新2 这个问题可能有一个答案:我如何比较Java中的字符串?,但问题是没有问我在问什么,答案只是比需要更详细.
因此,使用我的相同问题(在谷歌或其他方面)进行搜索意味着用户将不会被发送到该问题,或者由于问题的标题而可能完全解雇该问题.因此,为了其他用户的利益而保持这一点可能是一个好主意!
当我们用Java编写以下代码时:
object1 == object2;
运营商'=='在什么基础上决定平等?