可能重复:
等于和==之间的差异
例如,如果我有
MyClass foo = new MyClass();
MyClass bar = new MyClass();
if (foo == bar) {
// do something
}
if (foo < bar) {
// do something
}
if (foo > bar) {
// do something
}
Run Code Online (Sandbox Code Playgroud)
怎么做foo和bar比较?Java是否在寻找.compareTo()要实现的方法MyClass?Java是否在内存中比较对象的实际二进制结构位?
import java.io.*;
public class TerminateWhen
{
public static void main(String args[]) throws IOException
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = "";
System.out.println("Type \"x\" to exit..");
do {
str = br.readLine();
System.out.println(str);
}
while(str!="x");
}
}
Run Code Online (Sandbox Code Playgroud)
问题是即使输入"x",循环也不会退出..
假设我想将一个键及其值放在Map中.
我相信这是Java的作用:
获取密钥的Hashcode并检查映射中是否存在具有相同哈希码的密钥.
如果没有具有相同Hashcode的密钥,则可以将密钥放入Map中.
如果存在具有相同Hashcode的密钥,则使用equals来确定密钥是否可以放入Map中.
我的问题是为什么不使用==而不是equals在这个过程中?
在下面的程序中,我将变量设置th为true第二个if语句中的变量.我很好奇为什么它后来又回来了false.
public boolean nodeExist(TreeNode Tree, T value){
boolean th = false;
if(Tree.getValue()!= null){
if(value == Tree.getValue()){
th = true;
}else{
if(value.compareTo((T) Tree.getValue()) < 0){
nodeExist(Tree.getLeft(), value);
}else{
nodeExist(Tree.getRight(), value);
}
}
}else{
th = false;
}
return th;
}
Run Code Online (Sandbox Code Playgroud) 我有以下情况.我有一个Java中的HashMap,键作为字符串.然后在某个阶段,在运行时我创建等于这些键的字符串,以便从该映射中检索数据.字符串在"for"循环中如下创建:
String keyToRetrive = "lights[" + Integer.toString(i) + "]" + ".Intensity";
Run Code Online (Sandbox Code Playgroud)
关于它的奇怪的事情,当我通过地图迭代找到等于该字符串,即使找到匹配的搜索步骤over.So在该搜索循环的关键:
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry) iter.next();
if (name == entry.getKey()) { ///name- "lights[0].Intesity"
uniformOut = (ICleanable) entry.getValue();
break;
}
}
Run Code Online (Sandbox Code Playgroud)
具有名称"lights [0] .Intesity"的键永远不会返回true,即使地图包含一个.我如何解决它.我使用hashCode()来比较两个字符串值.所以这个版本确实有效:
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry) iter.next();
if (name.hashCode() == entry.getKey().hashCode()) {
uniformOut = (ICleanable) entry.getValue();
break;
}
}
Run Code Online (Sandbox Code Playgroud)
更新:在指出"=="不能正常工作并且应该使用"equals()"的事实后,我想缩小这个问题:为什么"=="适用于不是由几个创建的字符串连接块?我的意思是,如果我定义键字符串再次比较为一个简单的单个字符串:
String foo="foo";
Run Code Online (Sandbox Code Playgroud)
这样的字符串可以使用"=="与HashMap键进行比较.
我不是专业的Java程序员,所以任何人都可以解释为什么它这样工作?
我正在尝试比较字符串和字符(将其转换为字符串后).代码没有像我希望的那样工作.
package main;
import java.lang.Character;
public class Main {
public static void main(String[] args) {
char myChar = 'a';
String myString = "a";
if(myString == Character.toString(myChar)) {
System.out.println("This SHOULD work! But it doesn't.");
} else {
System.out.println("This SHOULDN'T work! But it does.");
}
}
}
Run Code Online (Sandbox Code Playgroud)
我在这做错了什么?
可能重复:
等于和= = 字符串比较和Java中的字符串实习之间的差异
这次是一个不言自明的问题.
编辑:我理解==不等于.我不理解的是为什么"a"=="a"中的一个都被分配或视为同一个对象实例(它们是).
编辑一些人阅读问题或者只是按下关闭按钮?它与上述任何一个都没有关系.告诉我,我在哪里提到等于方法.....
STRING.equals("myValue")vs 的区别是STRING == "myValue"什么?
我第一次使用STRING == "myValue"但我的IDE建议切换到使用.equals().这样做有什么特别的好处吗?