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用于比较两个对象的值是否相同,和内存地址无关
==强调栈中的比较,可以理解为地址比较
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(c)这个语句在anObject instanceof String这步判断不会通过,也就是cha[] 压根不能与String相比较,类型不是相同的。返回false