学习内容:
==
和equals()
使用区别
问题描述
package com.atguigu.demo;
import com.atguigu.bean.Person;
import java.util.Scanner;
public class Demo7 {
public static void main(String[] args) {
String str1="java";
String str2="java";
String str3=new String("java");
System.out.println(str1==str2);//判断两个对象是否相等 true
System.out.println(str1==str3);//判断两个对象是否相等 false
System.out.println("String-equals:"+str1.equals(str3));//true对比的是内容!
//这是为什么?此equals非彼equals!该equals是String重写后的!
Person per1=new Person();
Person per2=per1;
Person per3=new Person();
System.out.println(per2==per1);//true
System.out.println(per1==per3);//false per1和per3的地址是不一样的
System.out.println(per1.equals(per3));//判断per1和per3是否一致 false
Person per4=new Person();
per4.id=1;
per4.name="张三1";
Person per5=new Person();
per5.id=1;
per5.name="张三";
System.out.println(per4==per5);
System.out.println(per4.equals(per5));
}
}
原因分析:
主要是因为各个类如果没有明确继承某一个父类的话,会默认继承Object根父类,Object类中定义了equals方法,各个子类可以重写其具体方法实现,例如String类。其他普通自定义的类如果没有重写其equals方法的话,其功能跟 ==没啥本质区别,因为equals的源码中还是使用的 ==