String 为什么不能被继承?
因为它被final 修饰,成为不可变类 , 类似的还有 Integer等其它包装类
public static void main(String[] args) {
String a = "hello2";
final String b = "hello";
String d = "hello";
String c = b + 2;
String e = d + 2;
System.out.println(a == c);
System.out.println(a == e);
}
上述代码比较的时候为何第一次为true,第二次为false?
因为第一次和c比较,c是由b+2组成的,b是被final修饰的,它在程序编译期就可以被确定,所以通过查看编译后的程序就可以发现c在编译后成为了hello2
又因为字符串被缓存再常量池,所以两次hello2 指向的是同一地址。
第二次为false是因为,查看字节码发现在+2的时候,是实例化stringbuillder 通过apped去拼接的hello和2最后将其tostring
地址是stringbuiller实例化后的地址,所以比较时不相等。