提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
目录
前言
Object类
输出对象地址
object类里的tostring方法:
正确输出对象里内容
判断俩个对象大小:
object类里的equlas方法:
自己实现一个equals来比较内容是否相同
总结:
提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
提示:以下是本篇文章正文内容,下面案例可供参考
Object类是所有类的祖先,一切类默认继承object
package 接口;
//object类
class ePerson{
public String name="hello";
@Override
public String toString() {
return "ePerson{" +
"name='" + name + '\'' +
'}';
}
}
class eStudent{
}
public class Text5 {
public static void func(Object o){
System.out.println(o.toString());
}
public static void main(String[] args) {
// Object o=new Object();
ePerson e=new ePerson();
// func(o);
func(e);
}
}
如果不重写tostring输出:java.lang.Object@776ec8df,这是object默认的tostring方法
重写输出:ePerson{name='hello'},这是自己实现的tostring方法(方法重写)
ePerson类:
class ePerson{
public String id;
public ePerson(String id) {
this.id = id;
}
@Override
public String toString() {
return "ePerson{" +
"id='" + id + '\'' +
'}';
}
}
直接==比较:
public static void main(String[] args) {
ePerson person1=new ePerson("123");
ePerson person2=new ePerson("123");
System.out.println(person1 == person2);
}
这时输出false,为啥不是true呢,对象不同(地址不同)person1,person引用的地址不同
这时我们如果直接调用object类中equals呢?
如果直接调用object类中equals发现:
还是比较地址类似于==
1.在eperson类重写equals方法
@Override
public boolean equals(Object o) {
ePerson tmp=(ePerson) o;
return this.id.equals(tmp.id);
}
注意,id是string类型,string也重写了equals方法,返回的equals是string写好的equals来比较内容相同
2.在test中调用equals
System.out.println(person1.equals(person2));
此时返回true
此时自己实现的还有缺陷(忽略了特殊情况),这个比较完整:
@Override
public boolean equals(Object o) {
if(o==null){
return false;
}
else if(this==o){
return true;
}
else if(!(o instanceof ePerson){
return false;
}
ePerson tmp=(ePerson) o;
return this.id.equals(tmp.id);
}
解释一下:
object类equals是判断对象内容是否相同
一般自定义的类型都得重写equals方法,来判断内容相同
如果==左右两侧是引用类型变量,比较的是引用变量地址是否相同