先来一段小程序:
public static void main(String[] args) {
String a=new String("a");
String b=new String("a");
System.out.println(a.equals(b)); //输出true
System.out.println(a==b); //输出false
}
- == :用来比较基本类型(八大基本类型),比较的是值是否相等;如果用来比较引用类型,比较的就是引用对象所指向的地址是否相同。
- equals: 用来比较引用类型,比较的是是否是一个对象,继承自Object的equals比较的也是引用对象所指向的地址,java的一些类对其进行重写之后比较的是引用对象的内容是否相同。
再看一段代码:
public static void main(String[] args) {
String a="a";
String b=new String("a").intern();
System.out.println(a.equals(b)); //true
System.out.println(a==b); //true
}
intern();方法表示手动入池
常量池:用于存放java编译器已经确定了的常量。
在定义变量 b 的时候,先会在常量池中寻找有没有定义过的,如果有,就将引用直接指向这个已经存在的对象地址。