友情提醒
先看文章目录,大致了解知识点结构,直接点击文章目录可以跳转到文章指定位置。
第一章、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方法
例1:true
例1:false
new了以后都会在堆中建立新地址
例2:false
例3:true
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
重写后打印结果如下内容文章来源:https://www.toymoban.com/news/detail-458491.html
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模板网!