首先明确个概念:
1. "=="是基本运算符,判断引用是否指向堆内存的同一块地址;
2. "equals()"是一个方法,Object类中同样是判断引用是否指向堆内存的同一块地址,但是String,Integer之类的类都重写了equals()方法,使其比较的是对象的值而不是地址;(基本类型中没有这个方法)
例如:
int a = 1;int b = 1;
a==b:true;
因为基本类型它们在编译期就被确定了值,所以相同的值地址也相同,此处返回true;
String a = new String("c");String b = new String("c");
a==b 返回的为false;
a.equals(b) 返回true;
因为这里a、b为字符串对象,他们的值不能再编译的时候就确认,所以拥有自己的地址;
String a = "c"; String b="c";
a==b 返回值为true;
这里和上面为什么不同呢?因为这里String定义为字符串常量,而它们在编译期就被确定了所以如此;