【问题标题】:equals() method and '==' operator for primitive data types and class data types原始数据类型和类数据类型的 equals() 方法和 '==' 运算符
【发布时间】:2018-03-29 18:30:48
【问题描述】:

我已经知道equals() 方法(或任何其他类似的方法)比较对象之间给定类型的值,== 运算符比较表达式中声明的两个引用是否相同,但我有一个比较同一类中两个对象的每个字段时的问题,代码如下:

//fields are String name, String surname, int age and boolean gender belonging to the Person class.
public boolean isYou(Person person)
{
    return 
    getName().compareToIgnoreCase(person.getName()) == 0 &&
    getSurname().compareToIgnoreCase(person.getSurname()) == 0 &&
    getAge() == person.getAge() &&
    getGender() == person.getGender();

考虑到这个实现,是否正确声明必须使用方法来比较类数据类型(如字符串)并且在处理原始数据类型时可以使用== 运算符,即使完成了对象比较,而不是像getAge() == 2这样的简单比较?

【问题讨论】:

  • person.getAge() 不是一个对象——它的类型是int,这使它成为一个原始类型。运算符应用于表达式的类型,而不是基于构成表达式的任何组件。

标签: java class object methods operators


【解决方案1】:

声明必须使用方法来比较类数据类型(如字符串)是否正确

是的。

在处理原始数据类型时可以使用 == 运算符

是的。

即使完成了对象比较而不是像 getAge() == 2 这样的简单比较?

没有。这么说是不对的。原始类型不是对象,因此没有可调用的equals() 方法,因此您唯一的选择是通过== 比较值,并且对于始终产生所需结果的原始类型。

【讨论】:

    【解决方案2】:

    完全正确,处理原始类型如 int double byte char 等,必须使用 == 进行比较,必须因为它们不是对象,所以它们没有实现 equals()。这么澄清了,其余的都ok

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-21
      • 1970-01-01
      • 1970-01-01
      • 2011-03-05
      • 2020-01-24
      • 1970-01-01
      • 1970-01-01
      • 2010-12-16
      相关资源
      最近更新 更多