关于Java包装类的equals方法和“==”笔试题总结

 
 
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时,存放在常量池中,
超出范围存在堆中,
== 要视情况而定,有时比较的是栈,有时比较的是堆

猜你喜欢

转载自blog.csdn.net/willlu10/article/details/80164024