java String 是不可改变的类型。
String a = "hello2";
String d = "hello";
final String b = "hello";
String c = b + "2";// final相当于常量,编译阶段直接加入常量池
String cc = “hello”+“2”; 类似于 final修饰的,在编译期间,会自动优化处理为:hello2 并加入常量池,所以和a比较相等,和e比较不等
String e = d + "2";
System.out.println((a == c));// true
System.out.println((a == e));//false
System.out.println((e == c));//false
//e.intern()方法会检查e是否在常量池中,如果不在则将e所指向的对象添加到字符串常量池中,并返回指向常量池中对象的引用
e=e.intern();//e 是通过+ new出来的 在堆中,不在常量池中,所以加入常量池后,比较相等
System.out.println((a == c));// true
System.out.println((a == e));//true
System.out.println((e == c));//true
String s=“a”+“b”+“c”;创建几个对象? 因为“+”号编译器会自动优化,所以只创建一个对象“abc” 并存在JVM常量区中
以上使用equal都是相等的