关于equals()和 ==

关于equals()和 ==

在网上搜索equals和 == 的区别时

equals比较的是两个字符串内容是否相等;==比较的是两个字符串的内存地址是否相同

于是做了测试

1.用String s = xxxx; 创建对象

 public static void main(String[] args) {
//        Student student01 = new Student("111", 20);
//        Student student02 = new Student("121", 21);
//        Student s1=student01;

        String s1="qihong";
        String s2="qihong";
        String s3= s1;


        System.out.println(s1==s2);  //  true
        System.out.println(s1.equals(s2));  //true
        System.out.println(s1==s3);  //true
        System.out.println(s1.equals(s3));  //true

    }

看到这里很疑惑 == 不是比较对象地址的吗,为何s1==s2 为true?

其实是因为String s1 = “qihong” 这条语句是在 堆内存中的常量池里面创建了一个内容为"qihong"的字符串,s1指向这个空间的地址, 当执行 String s2=“qihong”; 时 s2 也指向这个地址,如图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wzQKHKLi-1631763169254)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210916111323766.png)]

因为s1 s2 指向同一个地址,所以不管是equals 还是 == 都是true

2.用String s1 = new String(“xxxx”);创建对象

  public static void main(String[] args) {
//        Student student01 = new Student("111", 20);
//        Student student02 = new Student("121", 21);
//        Student s1=student01;

        String s1 = new String("qihong");
        String s2 = new String("qihong");
        String s3 =s1;

        System.out.println(s1==s2);  // false
        System.out.println(s1.equals(s2));  //true
        System.out.println(s1==s3);  //true
        System.out.println(s1.equals(s3));  //true

    }

这个结果就符合预期了,流程图如下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rmdkqNjt-1631763169258)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210916113013726.png)]

String s1 = new String("qihong");
String s2 = new String("qihong");

创建了两个不同的对象,s1 s2 分别指向这两个对象的地址,String s3 =s1; 把s1 指向的对象的地址给了s3 ,所以s1==s3

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值