`

equals和==小测试

阅读更多
package testSingle;

import org.junit.Test;

public class TestEqualSingle
{
    @Test
    public void testSingle()
    {
        Person p = Person.getInstanse();
        Person p1 = Person.getInstanse();
        System.out.println(p1 == p);// true
    }
    /**总结:单例模式产生的对象是同一个对象,==意味着引用的对象是同一个,
     * 不管改引用对象是在堆里还是栈里 .*/
    @Test
    public void testEqules()
    {
        Person p = Person.getInstanse();
        Student s = new Student();
        s.setName("张三");
        System.out.println(s.equals(p));// true
    }
    /**
     * 总结:然后是equals方法相等,它不管是什么类的对象,只管
     * 是否符合能够让equals相等,当你没重写hashcode方法时,不会相等,
     * 因为Object写的 hashcode是随机的,equals相等的前提条件是hashcode相同
     */
}

class Student
{
    private String name;
    
    public String getName()
    {
        return name;
    }
    
    public void setName(String name)
    {
        this.name = name;
    }
    
    @Override
    public boolean equals(Object obj)
    {
        if (obj instanceof Student)
        {
            Student s = (Student)obj;
            if (s.getName() != null)
            {
                return s.getName().equals(this.name);
            }
        }
        if (obj instanceof Person)
        {
            Person p = (Person)obj;
            if (p.getName() != null)
            {
                return p.getName().equals(this.name);
            }
        }
        return false;
    }
    
    @Override
    public int hashCode()
    {
        return this.name.hashCode();
    }
}

class Person
{
    private String name;
    
    private static final Person per = new Person();
    
    /** 获取单例 */
    public static Person getInstanse()
    {
        return per;
    }
    
    private Person()
    {
        super();
        name = "张三";
    }
    
    @Override
    public int hashCode()
    {
        return this.name.hashCode();
    }
    
    @Override
    public boolean equals(Object obj)
    {
        if (obj instanceof Student)
        {
            Student s = (Student)obj;
            if (s.getName() != null)
            {
                return s.getName().equals(this.name);
            }
        }
        if (obj instanceof Person)
        {
            Person p = (Person)obj;
            if (p.getName() != null)
            {
                return p.getName().equals(this.name);
            }
        }
        return false;
    }
    
    public String getName()
    {
        return name;
    }
    
    public void setName(String name)
    {
        this.name = name;
    }
    
}
 

 

分享到:
评论

相关推荐

    java equals和==的区别详解

    在测试程序中,`object1` 和 `object2` 是不同的实例,所以`object1.equals(object2)` 返回`false`,而`object1 == object2` 也返回`false`。 总之,理解和正确使用`equals()` 和 `==` 是Java编程中的基础,这有助...

    java代码-== equals测试

    在Java编程语言中,`==` 和 `equals()` 是两种常用的比较操作符,但它们的用法和含义有所不同。本文将深入探讨这两个概念,并通过实际的代码示例进行测试和解释。 首先,`==` 操作符用于基本类型(如 int、char、...

    winform 重写Equals源码

    此外,`Equals`和`GetHashCode`应满足以下契约: - 如果`a.Equals(b)`为`true`,那么`a.GetHashCode()`和`b.GetHashCode()`应该相同。 - 如果`a.Equals(b)`为`false`,那么`a.GetHashCode()`和`b.GetHashCode()`...

    equals方法的重写.docx

    1. **`equals`方法和`hashCode`方法应保持一致性**:如果两个对象根据`equals`方法是相等的,那么它们的`hashCode`也应该是相等的。这是因为某些集合框架(如`HashMap`)会使用`hashCode`来定位元素,而使用`equals`...

    C#中的Equals、RefrenceEquals和==的区别与联系

    最后,我们通过给出的测试代码可以进一步了解这些方法和运算符在实际代码中的应用。通过不同的方式调用这些方法和运算符,我们可以看到不同情况下的比较结果。例如,对于字符串对象,由于它们被优化为相同的实例,...

    ==代替Object#equals() - 加速在容器类中搜索元素速度的可能性

    3. 传递性:对于任何非null的引用x、y和z,如果x.equals(y)返回true,并且y.equals(z)返回true,那么x.equals(z)也应返回true。 4. 一致性:对于任何非null的引用x和y,只要对象的字段不变,多次调用x.equals(y)应该...

    方法重写equals和多态

    `TestPerson.java`可能包含了对`Person`类以及其子类的测试代码,验证`equals()`方法的正确性和多态性的应用。 总结,"方法重写equals"是为了比较对象的内容,而"多态"则是面向对象编程中的重要特性,允许我们以一...

    Java中的equals()和hashCode()契约Ja

    - 测试`equals()`和`hashCode()`的正确性,可以使用JUnit的EqualsTester类或自定义测试用例。 总之,`equals()`和`hashCode()`是Java中不可或缺的方法,它们对于对象的比较和哈希表操作起着核心作用。理解并正确...

    lua单元测试框架测试用例实例

    Busted是一个流行的Lua单元测试框架,它提供了简洁的语法和丰富的功能,使得编写和运行测试用例变得简单易行。Busted的主要特点包括: 1. **断言库**:Busted提供了一套丰富的断言函数,如`assert.is_true`,`...

    Java中==符号与equals()的使用详解(测试两个变量是否相等)

    Java中==符号与equals()的使用详解是Java程序中的一个重要概念,它们都是用来测试两个变量是否相等的,但是它们的使用方法和应用场景是不同的。下面我们将详细介绍Java中==符号与equals()的使用详解。 一、使用==...

    关于Object中equals方法和hashCode方法判断的分析

    "关于Object中equals方法和hashCode方法判断的分析" 在 Java 中,Object 类提供了两个重要的方法:equals 方法和 hashCode 方法。这两个方法都是用于比较两个对象是否相等的,但它们的实现机理和作用域却有所不同。...

    微信小程序-微信小程序TDD示例代码

    weixin_smartapplication ...//调用单元测试assert函数,进行实际值,和期望值的判断,that是小程序当前页面的引用,最后一个参数是当前测试用例的描述 assert(test_string_value, false, that, "string va

    java 基础之(equals hashcode)

    在 `EqualsTest.java` 文件中,我们可以预期会找到一个测试类,该类可能包含对 `equals()` 和 `hashCode()` 方法的实现和测试。测试通常会使用 `assertEquals()` 来验证 `equals()` 和 `hashCode()` 方法的正确性,...

    微信小程序TDD编写示例代码.rar

     //调用单元测试assert函数,进行实际值,和期望值的判断,that是小程序当前页面的引用,最后一个参数是当前测试用例的描述  assert(test_string_value, false, that, "string value filter")

    equals:用于测试的模糊相等对象,是Mock.Any的更严格版本

    Equals允许您在测试期间在python对象之间声明某些相等约束。 有时我们不想断言绝对相等,例如,我们需要确保两个列表具有相同的元素,但不关心顺序。 这是专门为和使用而设计的。 与Mock搭配使用: from mock ...

    中科大软院软件系统测试实验报告2--白盒测试

    经过详细的测试和分析,“人民币数字大写转换程序”整体上能够满足设计要求,但仍需进一步改进和完善,特别是在处理边缘案例和异常情况方面。 #### 附录 由于篇幅限制,这里未提供详细的测试用例及测试结果。如有...

    2024秋招java开发、测试开发最全八股文

    综合上述内容,对于2024年秋季招聘的Java开发者和测试开发者,应具备扎实的Java基础知识,包括面向对象设计、异常处理、集合框架等,了解数据库管理和测试自动化,以及具备一定的实际项目经验,能够有效地解决问题并...

    软件测试的关于黑盒和白盒测试

    在`STest`类中,定义了五个测试方法,分别对应五种不同的输入数组,然后使用`Arrays.equals`方法比较原始数组和排序后的数组是否一致,以此判断排序是否成功。`assertTrue`方法用于断言预期的结果是否与实际结果相符...

Global site tag (gtag.js) - Google Analytics