==,equals()和instanceof()之间的区别

时间:2010-10-12 06:54:56

标签: java string string-comparison

String s=new String("Computer");
if(s=="Computer")
    System.out.print("equals A");
if(s.equals("Computer"))
    System.out.print("Equal B");

输出为Equal B

现在为什么==不会产生equals A

什么是instanceof

5 个答案:

答案 0 :(得分:5)

==是引用等于,如',这个确切的对象是与其他对象完全相同的对象吗?'。

当您创建s时,您创建了一个新对象,因此它与您正在比较它的字符串不是同一个对象(取决于您正在使用的JVM "foo" == "foo"将是真的,因为它将在内部使用相同的对象。)

当你调用.equals()时(字符串s)运行它自己的逻辑来确定它是同一个对象。在String的情况下,它将逐字符地比较它。

instanceof完全是另一回事,它将告诉您对象是否是某种类型对象的实例,例如"foo" instanceof String是真的。

答案 1 :(得分:3)

如果两个字符串具有相同的值,equals()方法将返回true==运算符只有true,如果两个字符串都指向同一个底层对象。因此,当通过equals(Object)方法测试时,表示相同内容的两个字符串保证相等;然而,当使用==运算符进行测试时,只有它们引用相同的Object才会成立。 因此,我们应始终使用equals()进行String比较。

instanceof关键字可用于测试对象是否为指定类型。例如,

if(foo instanceof Bar) { // must not pass
}

要获得更多信息,请参阅here

答案 2 :(得分:0)

同意这可能与另一个问题重复,但无论如何我都会回答。

==运算符用于确定两个对象或原始数据类型(如int)是否相同。

因为String是一个对象,所以使用==来比较两个字符串是否试图查看对象本身是否相同,而不是它们。为了获得“等于A”的结果,你需要将s与自身进行比较。

字符串的.equals().equalsIgnoreCase()是比较String对象的文本值的方法,这是您尝试执行的操作。

instanceof关键字用于发现对象的类型(例如,如果对象的类型为String或Integer类型)。

答案 3 :(得分:0)

如果您将字符串定义为s =“Computer”而不是创建新对象,则返回true。这是因为java将字符串文字存储在特殊的内存空间中,因此s和“Computer”字符串将指向相同的内存位置。 instanceof是一个运算符,如果左侧对象是右侧指定的类的类型,则返回true。

E.g。

String s=""; 
if(s instaceof java.util.String){
   ......
 }

prevoius位代码将返回true。

答案 4 :(得分:0)

  • x instanceof ClassName返回true,仅当x是类ClassName的对象或其任何子类时

  • x == y对值类型(char,int,float等)和引用类型(Object,Integer,YourClass,int [],...)的工作方式不同:对于值类型,如果x则返回true和y只是相同的值,而对于引用类型,如果x和y表示相同的对象,则返回true - 对于具有不同值的两个对象,结果可以为false。只需在引用类型上处理==就像在C ++中比较指针一样 - 如果表示指针的整数相等,则结果为true,即指针表示同一个对象。 所以:new String(“abc”)== new String(“abc”)为false - 相同的值但不同的对象,类似“abc”== new String(“abc”)为false,但“abc”== “abc”为真,因为如果一个String常量在.class文件中多次出现,它将被转换为一个String对象。

    • x.equals(y)默认情况下(在Object.equals中)实现为x == y,但许多子类重写它,例如对于字符串,x.equals(y)检查这些字符串是否具有相同的值,尽管它们是否是相同的对象,所以:new String(“abc”)。equals(new String(“abc”))为true,“abc”.equals(“abc”)为true

    • 但是,如果您要比较的所有字符串都已被“插入”,例如:x = x.intern(); y = y.intern(),然后x == y将起作用。所以例如“abc”== new String(“abc”)。intern()给出true。