基本数据类型和引用类型的比较

使用 == 和 equals比较:

  1.== 一般比较的是基本数据类型,equals比较的是引用类型

  2.==比较的是对象内容,equals比较的是对象的地址. 如果equals重写了,例如String,那么此时equals比较的就是具体对象内容

  3.如果使用 == 比较引用类型,他们比较的是地址. 那是否相等,就看是new 还是 非new 的方式了. 使用new的时候,铁定不一样.因为new会在堆中重新分配内存

   不使用new方法的时候,会从常量池[缓存]去获取,比较地址是否一样.同一个string常量,那么==为true,不相等,则为false

  Integer只有值在[-128.127]区间时 才会在常量池中缓存.

  equals方法不能用于比较基本数据类型的变量.

public class test {
    public static void main(String[] args) {
        /**Integer: 在不使用 new 新建对象时,统一从常量池中获取, 有缓存。
         * 数值在[-128-127]中的,两个值会相等
         * 
         * 2:使用new创建对象,new 的对象和数组会存放在堆中,那么就会开辟新的地址,此时你的 Integer变量值/引用值 存放的是指向堆的地址
         */
        Integer a = 100;
        Integer b = 110;
        System.out.println("a == b->"+ (a ==b)); // a == b   ->false
        
        Integer b2 = 100;
        System.out.println("a == b2->"+ (a ==b2)); //a == b2  ->true

        Integer a2 = 1000;
        Integer b2 = 1000;
        System.out.println("a2 == b2->"+ (a2 ==b2)); // a2 == b2   ->false, 超过了-128,127的范围, 那么它比较的是存放在堆中的地址。

        Integer Newa = new Integer(100);
        Integer Newb = new Integer(100);
        System.out.println("Newa  == bNew ->"+ (Newa == Newb)); // Newa  ==  Newb ->false
        System.out.println("Newa.equals( Newb)->"+ (Newa.equals( Newb))); // Newa.equals( Newb)->true

        /**
         * String类型: 重写了equals()方法,此时equals比较内容
         * == 对于基本数据类型来讲,就是比较内容, == 对于引用类型比较时就是 比较地址,指向对象在堆中的地址.
         * 对于非new 产生的对象,那么就会从常量池中获取
         */
        String s1 = "abc";
        String s2 = "abc";
        System.out.println("s1 == s2->"+(s1==s2)); //s1 == s2->true。会从常量池中获取,所以非 new生成的引用类型对象,==是在比较地址,但地址一样
        System.out.println("s1.equals(s2)->"+(s1.equals(s2))); // s1.equals(s2)->true, 会从常量池中获取

        String t1 = new String("abc");
        String t2 = new String("abc");
        System.out.println("t1 == t2->"+(t1==t2)); //t1 == t2->false, ==比较引用类型的地址值,比较基本数据类型的内容
        System.out.println("t1.equals(t2)->"+(t1.equals(t2))); // t1.equals(t2)->true, 重写equals,比较对象内容

        int num1 = 2;
        int num2 = 2;
        System.out.println("num1 == num2->"+(num1==num2));
        //System.out.println("num1.equals(num2)->"+(num1.equals(num2))); // int 类型没有equals()方法
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值