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;
}
}

  

  

最新文章

  1. nuget包重装
  2. jQuery基础课程
  3. CCNA网络工程师学习进程(3)常规网络设计模型与基本的网络协议
  4. 运行java的class文件方法详解
  5. cl.exe命令方式编译cpp
  6. php计算时间差
  7. 一步步学敏捷开发:5. Scrum的4种会议
  8. 04SpringMvc_映射器_BeanNameUrlHanderMapping
  9. linux设备树笔记__dts基本概念及语法【转】
  10. IIS7程序发布后 之 报图表处理程序配置 [c:\TempImageFiles\] 中的临时目录无效
  11. 百度地图SDk 使用
  12. BZOJ 1601: [Usaco2008 Oct]灌水( MST )
  13. 为了解决这个问题:07文本WORD文档超链接、页码成{HYPERLINK"网站"}、{PAGE}/{NUMPAGES}
  14. ZOJ3629 Treasure Hunt IV(找到规律,按公式)
  15. 【JAVASCRIPT】React + Redux
  16. amd和cmd区别
  17. 栈的实现Java
  18. 提升 Hive Query 执行效率 - Hive LLAP
  19. vue 之webpack打包工具的使用
  20. 百度echarts 3.0版本和2.0版本的兼容问题

热门文章

  1. 『TensorFlow × MXNet』SSD项目复现经验
  2. 遇到后缀名为whl的库的安装方法
  3. IDEA 错误:找不到或无法加载主类
  4. button中文字垂直居中
  5. Linux确认网口对应配置文件
  6. java反序列化漏洞原理研习
  7. [转]每天一个linux命令(44):top命令
  8. Qt与JS(三)
  9. 2-Servlet和servletContext
  10. Resharper插件安装和破解