public class equals {
public static void main(String[] args) {
int i = 30;
Integer j = new Integer(30);
Integer k = new Integer(30);
Integer l = 30;
Integer m = 30;
Integer n = 300;
Integer p = 300;
int q = 300;
Integer r = 300;
Integer s = new Integer(300);
Integer t = new Integer(300);
System.out.println(i == j);//true 自动拆箱 比较的是值
System.out.println(j.equals(i));//true 自动拆箱 比较的是值
//System.out.println(i.equals(k)); 编译出错,基本型不能调用equals()
System.out.println(k == j);//false j 和 k 是两个不同的堆 比较的是栈中存放的堆地址
System.out.println(j == l);//false 比较的是栈中存放的堆地址
System.out.println(j.equals(k));//true 比较的是值 值相同
System.out.println(n == p);//false,Integer值范围在-128~127时,存放在常量池中,超出范围存在堆中,因为超过了 -128--127 所以是false
System.out.println(n.equals(p));//true 虽然不在范围-128~127内 但是比较的是值
System.out.println(s == t);//false,Integer值范围在-128~127时,存放在常量池中,超出范围存在堆中,因为超过了 -128--127 所以是false
System.out.println(s.equals(t));//true 虽然不在范围-128~127内 但是比较的是值
System.out.println(l == m);//true
System.out.println(l.equals(m));//true 比较值且在-128~127内
System.out.println(j == 30);//true 自动拆箱 再进行强转
System.out.println(p == 300.0);//true 自动拆箱 再进行强转
System.out.println(p.equals(300));//true 比较值 值相同
System.out.println(p.equals(300.0));//false 比较值 值不同
System.out.println(q == r);//true q为int型 r是包装类 自动拆箱与范围无关
System.out.println(j == l);// false 栈不同 和范围无关
// Integer值范围在-128在-128~127时,存放在常量池中,超出范围存在堆中,因为超过了 -128--127 所以是false
}
}
总结:
equals 比较的是值,需要记住一特殊情况,Integer值范围在-128~127时,存放在常量池中,
超出范围存在堆中,
== 要视情况而定,有时比较的是栈,有时比较的是堆