==和equals的理解

Value value = new Value();
        Value value2 = new Value();
        value.i = value2.i = 100;
        //equals()方法默认是比较对象内存地址的引用,如果需要比较两个对象的值是否相同,
        //需要新类重写equals()方法
        System.out.println(value.equals(value2));//false
        String str = new String();
        String str1 = new String();
        str = "string";
        str1 = "string";
        /**
         * (我的理解)
         * String str = new String();在内存中创建以str对象,并为其在堆中分配空间
         * String str1 = new String();在内存中创建以str1对象,并为其在堆中分配空间
         * str = "string";在堆中产生一个值为“string”的对象,str指向这个对象
         * str1 = "string";str1也指向这个对象
         * 因此str和str1的引用地址相同
         * 疑问:
         * str = "string";
         * str1 = "string";
         * 这里应该在堆中产生两个值为“string”的对象,并为其在堆中分配空间
         * 那str和str1的引用地址就不相同。为什么在堆中只产生一个值为“string”的对象???
         */
        System.out.println(str.equals(str1));//true
        System.out.println(str == str1);//true
        /**
         * 只有用new了,才在堆中分配空间,创建对象
         * String str2 = new String("string1");
         * String str3 = new String("string1");
         * 虽然值是一样的,但是在堆中存在两个对象,因此str2和str3的引用地址不相同
         */
        String str2 = new String("string1");
        String str3 = new String("string1");
        //比较对象的引用
        System.out.println(str2 == str3);//false
        //比较对象的值,String重写了equals()
        System.out.println(str2.equals(str3));//true
        String str4;
        String str5;
        str4 = "string";
        str5 = "string";
        System.out.println(str4 == str5);//true
        System.out.println(str4.equals(str5));//true

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值