梳理归纳总结1(《java特种兵》C1 1.1.4)

equals 和“==”

“==”是引用地址的比较。

引用保存的对象是否是同一个对象


而equals 在未重写的情况下,默认是引用地址的比较。

然而在String类下,此方法是被重写的,则比较的是两个对象的关键属性值是否相同


e.g:

public class testString{
    public static void main(String[] args){
String a="ab";
String b="a"+"b";


final String c= "a";
String d=c+"b";
String e="a";
e=e+"b";

System.out.println(a==b);
System.out.println(a.equals(b));
System.out.pritnln(d==a);
System.out.pritnln(a==e);
    }
}
result:
true
true
true
false


使用了”+“来连接字符串赋值,则会被认为此对象是不会发生改变。

则比较时,视这两个对象来自同一地方。


使用了final 修饰符,使之强制约束了,则认定两者是同一个对象。


若是创建引用后,再去用”+“去连接字符串,则不认为是固定值,即使是常量。

书中提到,”在‘字节码增强’技术前,当代码发生切入后,代码可能发生改变。

这里指的代码改变应该是指编译的结果不同吧。




你可能感兴趣的:(梳理归纳总结1(《java特种兵》C1 1.1.4))