package com.yage;
public class Demo {
public static void main(String[] args) {
String a="a";
final String b = "b";
String ab1 = "ab";
System.out.println(System.identityHashCode(ab1));
String ab2 = a + b;
System.out.println(System.identityHashCode(ab2));
String ab3 = a + "b";
System.out.println(System.identityHashCode(ab3));
String ab4 = "a" + b;
System.out.println(System.identityHashCode(ab4));
System.out.println("----------------");
System.out.println(ab1 == ab2); //false
System.out.println(ab1 == ab3); //false
System.out.println(ab2 == ab3); //false
System.out.println(ab1 == ab4); //true
System.out.println(ab2 == ab4); //false
System.out.println(ab3 == ab4); //false
System.out.println("-------------------");
System.out.println(ab1.equals(ab2));//true
System.out.println(ab1.equals(ab3));//true
System.out.println(ab2.equals(ab3));//true
System.out.println(ab1.equals(ab4));//true
System.out.println(ab2.equals(ab4));//true
System.out.println(ab3.equals(ab4));//true
System.out.println("-------------------");
System.out.println(ab1.hashCode());
System.out.println(ab2.hashCode());
System.out.println(ab3.hashCode());
System.out.println(ab4.hashCode());
}
}
在Java中"=="比较的时内存地址,而equals比较的是对象的内容。
输出结果如下:
//输出结果如下:
356573597
1735600054
21685669
356573597
----------------
false
false
false
true
false
false
-------------------
true
true
true
true
true
true
-------------------
3105
3105
3105
3105
补充:==如果比较的是基本数据类型,则比较的是值,如果是引用数据类型,则比较的是引用,equals()本质上就是==,只不过String和Integer等很多类重写了equals()方法,变成了值比较。