- String a = "abc";
- String b = new String("abc");
- String c = "abc";
- System.out.println(a==b);
- System.out.println(a.equals(b));
- System.out.println(a==c);
- System.out.println(b==c);
复制代码
我也是菜鸟,大家回帖指点下
用毕老师经典案例解释下,
这个程序里按顺序首先常量池(串池)创建一个"abc",用指针a指引
然后b用了 new String(“abc”),用构造函数新创建了一个对象,但是这个“abc”是存在堆中,
于是当c="abc"时,就是串池中"abc"有两个引用,而b中建立的对象在堆中,所以以上答案是
false true true false
接下说==和equal
==比较的是内存中的地址值
equal方法是你可以通过复写来确定两个对象中的是否相等
Object 类的 equals 方法实现对象上差别可能性最大的相等关系;即,对于任何非空引用值 x 和 y(既是存在指针),当且仅当 x 和 y 引用同一个对象时,此方法才返回 true(x == y 具有值 true)。
注意:当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。
所以String 是一定重写equals方法确保字符的数据是相等,只是String方法不允许你继承重写的
|