String s=”hello”; String t=”hello”; char c[] ={‘h’,’e’,’l’,’l’,’o’};下列选项中返回false的语句是:
String s = "hello"; String t = "hello"; char c [ ] = {'h','e','1','1','o'}; System.out.println(s.equals (t)); //true s和t指向内存常量区的同一个字符串 ; System.out.println(t.equals (c));//false 一个返回字符串,一个返回对象 ; System.out.println(s==t);// true s和t指向内存常量区的同一个字符串 ; System.out.println(t.equals (new String ("hello")));//true equal用于比较两个对象的值是否相同,和内存地址无关
public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { String aString = (String)anObject; if (coder() == aString.coder()) { return isLatin1() ? StringLatin1.equals(value, aString.value) : StringUTF16.equals(value, aString.value); } } return false; }在这其中instanceof关键是判断anObject是否String 的子类或实现类
u ==等值比较:比的地址比较浅显的比较,比的是第一眼,所以对于基本类型内容相同结果就是true;如果比的是引用类型,即使同类型,同样的值,但是存放在堆内存中的地址不同,结果将会是false。
u equals比较:比较引用类型更合适,其比较的是对象的类型和其中的内容。
u equals的结果为true,那么两者的hashcode必相同,但是hashcode相同,equals结果不一定相同。
u equals只能比较引用类型,不能比较基本类型。
u 注意:equals方法的调用,变量必须要开辟空间,如果为变量null会造成空指针异常。