==:在比较引用型变量时,比较的是内存地址值。equals:是Object下的方法,当没有重写时,比较的也是地址.
具体到String类下,String他写了equals方法,比较的具体的字符串是否相同。
代码体现:
String s1 = new String("abc");//创建对象s1
String s2 = new String("abc"); //创建对象s2
System.out.println(s1 = = s2);//这时输出的结果为false,通过==比较的是两个对象的内存地址值。
System.out.println(s1.equals(s2));//结果为true,比较的是具体的两个字符串。
注意:
当没有创建对象直接指向字符串常量时,==由于指向的是常量池地址,所以他们是相等的。
String s3 = "abc";
String s4 = "abc";
System.out.ptintln(s3 == s4 ); \\结果为true,由于字符串时常量,这时s3、s4同时指向了字符串常量池中的"abc"常量,所以地址值相同.
hashCode()方法,返回的是一个虚拟的内存地址值,可以通过比较哈希值来判断是否是同一个对象。
|