Java: 论equals()方法和操作符“==”

相同点:

equals()方法重新前,两者均是比较两个对象的地址值是否相同。

不同点:

  1. equals()重写后,可以是比较两个对象的内容值是否相同,而“==”是比较地址值。
  2. 基本数据类型(int ,double,float,char,boolean,short)只能使用“==”比较,因为它们没有equals()方法,除非使用包装类。

重写前的equals()方法:

public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }

String类中重写后的equals()方法:

 public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String anotherString = (String)anObject;
            int n = value.length;
            if (n == anotherString.value.length) {
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                while (n-- != 0) {
                    if (v1[i] != v2[i])
                        return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    }

验证:

public class Test {
    public static void main(String[] args) {
        int a=1;
        int b=2;
        String str=new String("java");
        String str1=new String("java");
        System.out.println(str == str1);
        System.out.println(str.equals(str1));

    }
}

//运行结果
false
true
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Java中,equals和==都是用于比较两个对象的方法,但是它们的作用却有所不同。 ==:用于比较两个对象的内存地址是否相等,即它们是否指向同一个对象。如果两个对象的内存地址相同,则返回true,否则返回false。 例如: ``` String str1 = "hello"; String str2 = "hello"; System.out.println(str1 == str2); //true ``` 在上面的代码中,由于str1和str2指向的是同一个字符串常量池中的对象,因此它们的内存地址相同,==返回true。 equals:用于比较两个对象的内容是否相等。通常情况下,我们需要重写equals方法来比较对象的内容是否相等,因为默认实现是比较对象的内存地址是否相等。 例如: ``` String str1 = "hello"; String str2 = new String("hello"); System.out.println(str1.equals(str2)); //true ``` 在上面的代码中,由于str1和str2的内容相同,因此equals返回true。 需要注意的是,对于基本数据类型(如int、double等),它们可以使用==比较它们的值是否相等。而对于引用类型,我们需要使用equals方法比较它们的内容是否相等。 ### 回答2: equals和==是Java中用于比较对象的两个重要操作符。虽然它们都可以用于比较对象,但它们的功能和用法略有不同。 "=="操作符比较的是两个对象的引用值。当使用"=="比较两个对象时,它会检查两个对象的引用是否指向同一个内存地址。换句话说,它比较的是两个对象是否是同一个实例。如果两个对象的引用相同,那么"=="操作符会返回true,否则返回false。例如: String a = "Hello"; String b = "Hello"; System.out.println(a == b); // 输出true 上述代码中,a和b都指向内存中的同一个字符串,所以"=="返回true。 而equals()方法是在Object类中定义的方法,它用于比较两个对象的内容是否相等。通常情况下,equals()方法被子类重写以实现自定义的对象比较逻辑。在重写equals()方法时,我们通常需要比较两个对象的特定属性或者状态是否相等,而不是仅仅比较对象的引用。例如: public class Person { private String name; private int age; // 省略构造函数和其他方法 @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null || getClass() != obj.getClass()) { return false; } Person person = (Person) obj; // 比较两个对象的特定属性是否相等 return age == person.age && Objects.equals(name, person.name); } } 在上述代码中,Person类重写了equals()方法,根据name和age属性的值比较了两个Person对象的内容是否相等。 总的来说,"=="比较的是两个对象的引用,而equals()比较的是两个对象的内容。在比较对象时,我们根据具体的需求使用适当的操作符。 ### 回答3: equals和==是在Java中用来比较对象的方法操作符。 首先,==是一个操作符,用于比较两个对象之间的引用是否相等。如果两个对象的引用指向相同的内存地址,则返回true;否则返回false。这意味着==比较的是对象是否完全相同。 而equals是Object类中的一个方法,用于比较两个对象的内容是否相等。在默认情况下,equals方法与==具有相同的作用,即比较两个对象的引用是否相等。但是,通常我们需要在自定义类中重写equals方法,以便根据对象的内容进行比较。这样,equals方法将根据开发者定义的逻辑来判断两个对象是否相等。 在默认情况下,equals方法与==起到相同的作用,因为它们都比较两个对象的引用。例如: ``` String str1 = "Hello"; String str2 = "Hello"; System.out.println(str1 == str2); // 输出true System.out.println(str1.equals(str2)); // 输出true ``` 然而,如果我们创建了一个自定义类,并且需要用来比较对象内容的话,我们需要重写equals方法,例如: ``` class Person { private String name; private int age; // ... @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null || getClass() != obj.getClass()) { return false; } Person person = (Person) obj; return age == person.age && Objects.equals(name, person.name); } } ``` 上面例子中的equals方法根据两个Person对象的name和age属性来判断它们是否相等。 总而言之,==比较的是对象的引用是否相同,而equals方法可以根据开发者自定义的逻辑来判断两个对象的内容是否相等。在默认情况下,equals与==一样,比较对象的引用。但我们可以重写equals方法,使其比较对象的内容。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值