格物致知诚意正心 2022-10-08 16:23 采纳率: 0%
浏览 13

java中的String为什么可以使用==比较字符串内容?

问题遇到的现象和发生背景

java中的String为什么可以使用==比较字符串内容?

package com.hspedu.poly_.test;

public class Person {
    private String name;
    private int age;
    private char gender;

    public Person(String name, int age, char gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
    }

    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj instanceof Person) {
            Person p = (Person) obj;
            return /*this.name.equals(p.name)*/  // equals 和 == 结果相同
                    this.name == p.name &&     //此处进行  == 比较地址 地址理应不同 但为什么会判断为true呢?
                    p.age == this.age &&
                    p.gender == this.gender;
        }
        return false;
    }
}

-------------------------------------------
package com.hspedu.poly_.test;

public class EqualsExercise01 {
    public static void main(String[] args) {
        Person person11 = new Person("123", 123, '女');
        Person p2erson22 = new Person("123", 123, '女');

        System.out.println(person11.equals(p2erson22)); //true 为什么会判断为true呢?

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

        System.out.println(s1 == s2);            //false
        System.out.println(s1.equals(s2));    //true     这种表达又符合地址比较


    }
}

运行结果及报错内容

true
false
true

我的解答思路和尝试过的方法

https://www.cnblogs.com/syxchina/archive/2011/05/12/2197212.html

  • 写回答

2条回答 默认 最新

  • 皮蛋不吃粥 2022-10-08 16:36
    关注

    == 和 equals 引用类型都是比较地址,只是String重写了equals 变成了比较内容。

    评论

报告相同问题?

问题事件

  • 创建了问题 10月8日

悬赏问题

  • ¥15 报酬10000,做一个简单的换汇网站
  • ¥15 关于#vue.js#的问题:word excel和ppt预览问题语言-javascript)
  • ¥15 Apache显示系统错误3该如何解决?
  • ¥30 uniapp小程序苹果手机加载gif图片不显示动效?
  • ¥20 js怎么实现跨域问题
  • ¥15 C++dll二次开发,C#调用
  • ¥15 请教,如何使用C#加载本地摄像头进行逐帧推流
  • ¥15 Python easyocr无法顺利执行,如何解决?
  • ¥15 为什么会突然npm err!啊
  • ¥15 java服务连接es读取列表数据,服务连接本地es获取数据时的速度很快,但是换成远端的es就会非常慢,这是为什么呢