首先= =与equals是有明显区别的。
强调栈中的比较,可以理解为地址比较,该运算符表示指向字符串的引用是否相同。
如: String a=“abc”;String b=“abc”,
那么ab将返回true。这是因为在java中字符串的值是不可改变的,相同的字符串在内存中只会存
一份,所以a和b指向的是同一个对象;再比如:String a=new String(“abc”); String b=new String(“abc”);
那么a==b将返回false,因为a和b指向不同的对象。
equals强调对象的内容比较
例如:
String s=“hello”;会在栈中生成hello字符串,并存入字符串常量池中。
String t=“hello” ;创建时,会在字符串常量池中寻找,当找到需要的hello时,不进行字符串的创建,引用已有的。 所以,s= =t返回true,s.equals(t)也是true。
char c[]={‘h’,‘e’,‘l’,‘l’,‘o’}; c= =s这个是不存在的,==两边类型不同
t.equals©这个语句在anObject instanceof String这步判断不会通过,也就是cha[] 压根不能与String相比较,类型不是相同的。返回false