• Java学习笔记13(equals()方法;toString()方法)


    equals()方法;

      equals方法是Object类中的方法;Object是所有类的祖宗,所以所有类都有equals()方法;

      boolean equals(Object obj);

      equals方法是比较两个对象是否相等;对象为引用数据类型,比较的是内存地址;

    public class Person {
        private String name;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
        
    }
    public class Test1 {
        public static void main(String[] args) {
            Person p1=new Person();
            p1.setName("张三");
            System.out.println(p1);//p1内存地址
            Person p2=new Person();
         p2.setName("张三"); System.out.println(p2);
    //p2内存地址boolean b=p1.equals(p2); System.out.println(b); } }//运行结果:com.zs.demo5.Person@15db9742 // com.zs.demo5.Person@6d06d69c // false

    可以看出,虽然p1与p2内用相同,但是内存地址却不同,所以比较结果为false;很多情况下我们是要比较他们的内容是否相同,所以需要重写equals方法;

    public class Person {
        private String name;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        @Override
        public int hashCode() {
            final int prime = 31;
            int result = 1;
            result = prime * result + ((name == null) ? 0 : name.hashCode());
            return result;
        }
    
        @Override
        public boolean equals(Object obj) {//重写equals方法
            if (this == obj)
                return true;
            if (obj == null)
                return false;
            if (getClass() != obj.getClass())
                return false;
            Person other = (Person) obj;
            if (name == null) {
                if (other.name != null)
                    return false;
            } else if (!name.equals(other.name))
                return false;
            return true;
        }
    }
    public class Test1 {
        public static void main(String[] args) {
            Person p1=new Person();
            p1.setName("张三");
            System.out.println(p1);//p1内存地址
            Person p2=new Person();
         p2.setName("张三"); System.out.println(p2);
    //p2内存地址boolean b=p1.equals(p2); System.out.println(b); } } //运行结果:com.zs.demo5.Person@bd308 //     com.zs.demo5.Person@1f //     true

    toString()方法;输出语句中调用的是toString方法,上例中,输出的是内存地址,当需要看对象中的值的时候,就重写toString()方法;

    public class Person {
        private String name;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        @Override
        public String toString() {//重写toString()方法
            return "Person [name=" + name + "]";
        }
        
    }
    public class Test1 {
        public static void main(String[] args) {
            Person p1=new Person();
            p1.setName("张三");
            System.out.println(p1);//p1内存地址
            Person p2=new Person();
         p2.setName("张三"); System.out.println(p2);
    //p2内存地址 } }//运行结果:

    //Person [name=张三]
    //Person [name=张三]

    
    

    这里添加一个特殊的例子

    public class Demo {
        
        public static void main(String[] args) {
            String s="hello";//String 直接赋值的时候,可以通过==判断是否相等;
            String s2="hello";
            System.out.println(s==s2);//==判断;返回值为true
            String s3=new String("hello");//创建string对象
            String s4=new String("hello");
            System.out.println(s3==s4);//当string为引用类型变量创建的对象时,s2、s3代表的是对象;比较的是内存地址;结果是false;
            System.out.println(s3.equals(s4));//String重写了Object中equals()方法,比较结果为true;
        }
    }

      

      

  • 相关阅读:
    Java 的垃圾回收机制
    Java 变参函数的实现
    对已知有限集合中缺失或重复元素的查找
    Java 旋转数组查找旋转点和任意元素(元素可重复)
    第三章 磁盘分区
    第二章 一切都是对象
    发布 AutoRssReceiver Console 机器人! 兼讲: .Net 中的 Attribute (特性)
    .Net/C#/VB/TSQL/Java 实现: 将天文数字转换成中文大写 (2000 年前的思路,打劫的,一点儿技术含量都没有)
    .Net/C#/VB/TSQL/Java/Script 实现: 将天文数字转换成中文大写 (2000 年前的思路,打劫的,一点儿技术含量都没有)
    利用"委托"实现类的对象实例按"多字段嵌套"排序
  • 原文地址:https://www.cnblogs.com/Zs-book1/p/10554856.html
Copyright © 2020-2023  润新知