Java中的equals方法详解,Java中的toString方法

这篇具有很好参考价值的文章主要介绍了Java中的equals方法详解,Java中的toString方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

友情提醒

先看文章目录,大致了解知识点结构,直接点击文章目录可以跳转到文章指定位置。

第一章、Java中的两种比较方式:==比较和equals比较

1)Java中的 "=="比较

①== 是Java中的比较运算符
②比较基本类型时,比较的是双方的值
③比较引用类型时,比较的是双方的地址值

// 例二 字符串常量池是堆中一块特殊区域,多次使用String str=“字符串数据”创建同一个字符串数据时,会指向字符串常量池的同一个地址,所以地址一直是同一个,str0 == str1 是true
		String str0 = "比较";
		String str1 = "比较";
		System.out.println("例1:" + (str0 == str1));

		//例二 而new出来对象在堆里,不同于前面的字符串常量池会指向同一个地址,而是会创建新地址,所以str3 == str4结果是false
		String str3 = new String("地址");
		String str4 = new String("地址");
		System.out.println("new了以后都会在堆中建立新地址");
		System.out.println("例2:" + (str3 == str4));//false
		// 例三  基本数据类型,==判断的是值
		int a1 = 1;
		int a2 = 1;
		System.out.println("例3:" + (a1 == a2));

比较结果如下:可以看到==比较的是引用类型数据的地址,想不比较地址就需要用到equals方法

1true1false
new了以后都会在堆中建立新地址
例2false3true

2)Java中的 equals比较

①equals方法是object类中的方法,所以任何类都可以重写这个方法
ps:不懂什么是方法重写看这篇文章==》方法的重写和重载

②只能用于判断引用类型,重写后用于判断内容是否相等。
③不重写方法的话就是使用==操作符判断引用类型的地址值。所以一定要记得重写啊,不然白给。
下面是重写详解:

 //-------------------------------分割---------------------------------
class Person {
    private String name;
    private int age;
 
//重写Object的equals方法
    public boolean equals(Object obj) {
//同对象判断,比较的两个对象是同一个对象返回true
        if (this == obj){   //this代表调用equals方法的对象
            return true;
        }
        if (obj == null) { //传进来是null值,直接返回false
			return false;
		}
		if (this.getClass() != obj.getClass()) { //getClass()返回Class类型的对象。
			return false;
		}
//同类型判断
        if (obj instanceof Person){  //obj是Person,我们才比较
//如果程序能够执行到此处,说明传入的不是null,并且不是同一对象,而且是两个对象都是Person类型的
//obj属于Object类型,Object类中没有定义过name、age、sex属性,为了获得属性强转操作:Object -> Person,
            Person p = (Person) obj;
//name是String类型,也是引用类型所以用equals,age是int类型用==就好
            return this.name.equals(p.name) && this.age == p.age;
        }
        //如果不是person,则直接返回false;
        return false;
    }
 //构造方法
  	public Person() {
    }
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
//getter&setter方法
    public String getName() {    return name;    }
    public void setName(String name) {    this.name = name;   }
    public int getAge() {    return age;	 }
    public void setAge(int age) {    this.age= age;   }
}

测试equasl方法

/*
判断两个person对象的内容是否相等属性值一样,返回true,不同返回false
 */
public class TestEquals {
    public static void main(String[] args) {
        Person p1 = new Person("张三", 22);
        Person p2 = new Person("张三", 22);
       	System.out.println(p1 == p2);			//比较地址是否相等	false
		System.out.println(p1.equals(p2));		//true
    }
}

第二章、重写toString方法

1)toString方法

①toString方法是object类中的方法,所以任何类都可以重写这个方法
②作用其实是为了方便转为字符串,打印输出,有些引用类型打印输出的时候是地址值这是很不方便的。比如在打印引用类型的时候System.out.println(xxx),自动调用toString()方法不用显式打出来。这是为了方便所有类的字符串操作而特意加入的一个方法
③实际例子如下:

class Person {
    private String name;
    private int age;
    private char sex;
 //构造方法
  	public Person() {
    }
 public Person(String name, int age, char sex) {
		super();
		this.name = name;
		this.age = age;
		this.sex = sex;
	}
//getter&setter
    public String getName() {    return name;    }
    public void setName(String name) {    this.name = name;   }
    public int getAge() {    return age;	 }
    public void setAge(int age) {    this.age= age;   }
    public char getSex() {	return sex;	}
	public void setSex(char sex) {	this.sex = sex;	}

//重写toString方法
	@Override
	public String toString() {
		return "Person{" +
				"name='" + name + '\'' +
				", age=" + age +
				", sex=" + sex +
				'}';
	}
}

未重写打印结果是地址值:

equals.Person@6e8dacdf

重写后打印结果如下内容

Person{name='张三', age=30, sex=}

2)重写equals和toString方法快捷键

ps:重写equals和toString方法非常的普遍,ide工具有直接生成方法重写的快捷方式:
eclipses 是:alt + shift + s
idea是:alt + insert
文章来源地址https://www.toymoban.com/news/detail-458491.html

到了这里,关于Java中的equals方法详解,Java中的toString方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java杂记————object.getClass()和object.class以及Java中的toString()方法的的区别

    (这里补充一下:Class类,它就是一个类,它将普通的类作为它的对象: 每个普通类都只有一个Class对象 普通类的Class对象用getClass()方法或者class来获取     比如    同时我们还可以延伸Field属性类,Constructor构造器类) 需要注意的是: 直接用print之类的函数输出一个对象会

    2024年02月11日
    浏览(45)
  • java中容易被忽视的toString()方法

    之前一直认为toString就是将数据转换成字符类型,直到最近写出了一个bug才对toString有了新的认识 不同数据类型,toString() 有不同的操作 定义一个student类,包含姓名 String类型、性别 String类型、年龄 int 类型、分数列表 String类型的list类型 测试toString方法 运行结果,toString()方

    2024年02月21日
    浏览(58)
  • Java 中的比较 equals 和 ==

    这个问题在 Java 面试的时候大概率会被问到。 不是因为这个问题有什么复杂的,只是因为这个地方超出人类认知,你相信吗? 如果你上培训班或者在学校学习的话,你的老师大概率可能会告诉你对于: 基本类型:比较的是值是否相同; 引用类型:比较的是引用是否相同;

    2024年02月09日
    浏览(36)
  • Java中的equals和hashCode

    目录 equals hashCode equals和hashCode之间的关系 总结 equals方法是Object类中用于检测两个对象是否相同的方法,Object类中实现的是两个对象引用是否相同的方法,看以下Object类中代码: 可以看出来,Object类中equals方法本质上比较的还是两个对象的引用是否相同。也就是比较一个对象

    2024年02月06日
    浏览(75)
  • Java中equals详解

    equals是在object类中的方法,在object中equals是用来看看 两个参数是否引用的是同一个对象 例: obj.equals(obj2) 若是返回true说明两者引用同一个对象 源码: 但是在我们实际开发中经常比较的是 两个对象的内容是否相等 ,因此就要重写equals,注意只能是 一个类里比 说到equals不得

    2023年04月08日
    浏览(58)
  • java equals与equalsignorecase详解

    Java中的equals()方法用于比较两个对象是否相等,它在Object类中定义,通常需要在子类中进行重写以实现特定的行为。equalsIgnoreCase()方法也是用于比较字符串是否相等,但不考虑大小写,即它会忽略字符串中字符的大小写差异。 equals()方法的默认实现是检查两个对象的引用是否

    2024年02月15日
    浏览(38)
  • 7-1 jmu-Java-03面向对象基础-01-构造方法与toString

    String name、int age、boolean gender、int id 所有的变量必须为私有(private)。 注意:属性顺序请严格按照上述顺序依次出现。 分析: 定义一个Person的类,并在类中包含 String name 、 int age 、 boolean gender 、 int id ,并且定义为私有属性( private ) 1.编写无参构造函数:   打印\\\"This i

    2024年02月06日
    浏览(36)
  • equals方法的用法(java)

    equals 和 == 易错使用案例集合

    2024年02月16日
    浏览(35)
  • Java中怎么使用equals()方法比较

           在 Java 中, equals() 方法用于比较两个对象是否相等。 equals() 方法是 Object 类的方法,可以被所有的类继承和使用。 要使用 equals() 方法,需要按照以下步骤进行操作: 1.确保你要比较的对象不为 null 。否则,如果你尝试调用 equals() 方法,会触发空指针异常。 2.调用要

    2024年01月19日
    浏览(49)
  • Java进阶(7)——手动实现LinkedList & 内部node类的实现 & 增删改查的实现 & toString方法 & 源码的初步理解

    1.linkedList的节点,当前,上一个,下一个的思想; 2.根据index找node的方法,根据index确定从头部还是尾部; 3.linkedlist的增删改查的实现,本质是改变节点的信息; 4.递归方法实现自定义链表的toString方法; Java进阶(3)——手动实现ArrayList 源码的初步理解分析 数组插入数据和

    2024年02月11日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包