0
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

4

5 回答 5

5

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

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

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

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

于 2010-10-12T07:04:01.250 回答
3

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

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

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

有关更多信息,请参见此处

于 2010-10-12T06:57:24.777 回答
0

同意这可能是另一个问题的重复,但无论如何我都会给出答案。

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

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

一个字符串的.equals().equalsIgnoreCase()是比较字符串对象的文本值的方法,这是您尝试做的。

instanceof关键字用于发现对象的类型(例如,对象是字符串类型还是整数类型)。

于 2010-10-12T07:04:18.270 回答
0
  • x instanceof ClassName 当且仅当 x 是 ClassName 类或其任何子类的对象时才返回 true

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

    • x.equals(y) 默认情况下(在 Object.equals 中)实现为 x == y,但许多子类会覆盖它,例如对于字符串,x.equals(y) 检查这些字符串是否具有相同的值,尽管如果它们是相同的对象,那么: new String("abc").equals(new String("abc")) 为真,并且 "abc".equals("abc") 为真

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

于 2010-10-12T14:57:03.807 回答
0

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

例如

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

前面的代码将返回 true。

于 2010-10-12T09:48:34.990 回答