Java的equal 、 == 、hashcode、内存地址

   public static void main(String[] args) {
        String str0 = new String("HelloWord");  // 堆区
        String str1 = "HelloWord";                     // 常量区
        String str2 = "HelloWord";
        String str3 = new String("HelloWord");
        String str4 = "Hello";
        String str5 = "World";
        String str6 = str4 + str5;
        String str7 = str4 + "World";
        System.out.println("------ == ------");
        System.out.println(str0 == str1);   // false
        System.out.println(str1 == str2);   // true
        System.out.println(str1 == str3);   // false
        System.out.println(str1 == str6);   // false
        System.out.println(str1 == str7);   // false
        System.out.println(str6 == str7);   // false

        System.out.println("------ equal ------");
        System.out.println(str1.equals(str2));  // true
        System.out.println(str1.equals(str3));  // true
        System.out.println(str1.equals(str6));  // false
        System.out.println(str1.equals(str7));  // false
        System.out.println(str6.equals(str7));  // true

        System.out.println("------ hashcode ------");
        System.out.println(str0.hashCode());    // 在堆量里边,str0,str1,str2,str3的hashcode相等
        System.out.println(str1.hashCode());    // 在常量里边,str1,str2,str3的hashcode相等
        System.out.println(str2.hashCode());    // 在常量里边,但str1 == str2为false,str1.equal(str2)为true;
        System.out.println(str3.hashCode());    // 在堆里边,但str1 == str3为false,str1.equal(str3)为true;
        System.out.println(str6.hashCode());    // 在常量里边,str6和str7hashcode相等
        System.out.println(str7.hashCode());    // 在常量里边,但str6 == str7为false,str6.equal(str7)为true;
        /**
         * 结论:hashcode和对象的内存地址没有必然关系,不是hashcode相等,他们的内存地址就一定相等
         * 1:由此可见新new 的两个对象他们存在于堆内存里面他们的hashcode值是一样的,
         *    但是通过==去判断两个对象是否是同一对象的时候,返回结果确实false,
         *    由此可以证明hashcode和对象的内存地址没有必然关系
         * 2:还能看出来常量区的"HelloWord"一直是同一个,所以常量区的内存地址是一样的
         */
    }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值