一,java.Lang.Object 类:是所有类的父类。若一个类没有显示的继承任何类时,默认extends java.Lang.Object
①既然Object类是所有类的父类,因此Object类中的内容是最具共性的
②既然Object类是所有类的父类,因此子类可以继承Object类中所有的方法(Object中没有属性)
③既然Object类是所有类的父类,因此若Object类中的方法对于子类来说不适用,子类可以对其进行重写
- public class ObjectTest {
- public static void main(String[] args) {
- Person person=new Person();
- }
- }
- class Person/*extends java.Lang.Object */{
- }
equals()方法:
1.“==”运算符
①基本数据类型:比较两个基本数据类型的 值 是否相等。
②引用数据类型:比较两个引用数据类型的 地址值 是否相等。2.public boolean equals(Object obj):用于比较二个对象是否相等
①equals方法在java.lang.Object类中 (所有的类都继承了Object类中的equals方法)
②只能比较两个引用数据类型是否相等
③Object类中的 equals() 方法比较两个对象的 地址值 是否相等。(查看源码发现,实际就是“==”完成的)
④若Object类中的 equals() 方法对于我们不适用,我们可以对其进行重写【面试题】“==”和equals()的区别?-------上述所述
2.public boolean equals(Object obj):用于比较二个对象是否相等
①equals方法在java.lang.Object类中 (所有的类都继承了Object类中的equals方法)
②只能比较两个引用数据类型是否相等
③Object类中的 equals() 方法比较两个对象的 地址值 是否相等。(查看源码发现,实际就是“==”完成的)
查看源码,底层原理:“==”比较两个对象的地址值是否相等
注意:String的equals()方法与Object的equals()方法不同
原因:
String重写了Object类的equals()方法,比较的是两个字符串的内容
NOW:
若Object类中的 equals() 方法对于我们不适用,我们可以对其进行重写
- public class ObjectTest {
- public static void main(String[] args) {
- /* int num=65;
- char ch='A';
- double d1=65.0;
- System.out.println(num==ch);
- System.out.println(num==d1);
- System.out.println(ch==d1);
- Person p1=new Person("张三",18);
- Person p2=new Person("张三",18);
- Person p3=p1;
- System.out.println(p1==p2);
- System.out.println(p2==p1);
- System.out.println(p3==p1);*/
-
- Person p1=new Person("张三",18);
- Person p2=new Person("张三",18);
- boolean boo1= p1.equals(p2);
- System.out.println(boo1);//false---重写后变为:true
-
- String str1=new String("AA");
- String str2=new String("AA");
- System.out.println(str1.equals(str2));//true
-
- //需求:若两个人的姓名和年龄一样,视为同一个人 (equals()方法返回true )
-
- }
- }
- class Person/*extends java.Lang.Object */{
- private String name;
- private int age;
-
- public Person() {
- }
-
- public Person(String name, int age) {
- this.name = name;
- this.age = age;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public void setAge(int age) {
- this.age = age;
- }
-
- public String getName() {
- return name;
- }
-
- public int getAge() {
- return age;
- }
- //重写Object类的equals()方法
- public boolean equals(Object obj){
- if (obj instanceof Person){
- Person p=(Person) obj;
-
- if (this.name.equals(p.name)&&this.age==p.age){
- return true;
- }
- }
- return false;
- }
- }
Exer:
- package Object类;
- /*
- 1.编与Order类,有int型的orderId, String 型的orderName,相应的getter()和setter()方法,
- 两个参数的构造器,重写父类的equals()方法:public boolean equals (Object obj),
- 并判断测试类中创建的两个对象是否相等。
- */
- public class OrderTest {
- public static void main(String[] args) {
- Order o1=new Order(101,"订单1");
- Order o2=new Order(101,"订单1");
- System.out.println(o1.equals(o2));//false---true
-
- }
- }
- class Order{
- private int orderId;
- private String orderName;
- public Order() {
- }
- public Order(int orderId, String orderName) {
- this.orderId = orderId;
- this.orderName = orderName;
- }
- public void setOrderId(int orderId) {
- this.orderId = orderId;
- }
- public void setOrderName(String orderName) {
- this.orderName = orderName;
- }
- public int getOrderId() {
- return orderId;
- }
- public String getOrderName() {
- return orderName;
- }
- //重写Object类的equals()方法
- public boolean equals (Object obj){
- if (this==obj){//如果两个地址值一样
- return true;
- }
- if (obj instanceof Order){
- Order o=(Order) obj;
- if (this.orderId==o.orderId&&this.orderName.equals(o.orderName)){
- return true;
- }
- }
- return false;
- }
- }
toString()方法:
一.public String toString():返回当前对象的的字符串表现形式
①在java.lang.Object类中
②当直接输出对象的引用,默认调用toString()方法
③Object类中的 toString()方法返回值的格式为:
getClass().getName()+'@'+Integer.toHexString(hashCode());
④因此,Object类中的 toString() 对于我们来说不适用,我们可以对其重写。
- package Object类;
- /*
- 一.public String toString():返回当前对象的的字符串表现形式
- ①在java.lang.Object类中
- ②当直接输出对象的引用,默认调用toString()方法
- ③Object类中的 toString()方法返回值的格式为:
- getClass().getName()+'@'+Integer.toHexString(hashCode());
- ④因此,Object类中的 toString() 对于我们来说不适用,我们可以对其重写。
- */
-
- public class ToStringTest {
- public static void main(String[] args) {
- Person p1=new Person("张三",18);
- /*String str=p1.toString();
- System.out.println(str);*/
-
- System.out.println(p1.toString());
- System.out.println(p1);
- }
-
-
-
- class Person/*extends java.Lang.Object */{
- private String name;
- private int age;
-
- public Person() {
- }
-
- public Person(String name, int age) {
- this.name = name;
- this.age = age;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public void setAge(int age) {
- this.age = age;
- }
-
- public String getName() {
- return name;
- }
-
- public int getAge() {
- return age;
- }
- //重写Object类的equals()方法
- public boolean equals(Object obj){
- if (obj instanceof Person){
- Person p=(Person) obj;
-
- if (this.name.equals(p.name)&&this.age==p.age){
- return true;
- }
- }
- return false;
- }
- //重写Object类的toString()方法
- public String toString(){
- return "姓名:"+name+" 年龄:"+age;
- }
- }
-
-
重写前:
重写后:
Exer:
- package Object类.Exer;
-
- public class GeometricObject {
- protected String color;
- protected double weight;
-
- public GeometricObject() {
- this.color="white";
- this.weight=1.0;
- }
- public GeometricObject(String color, double weight) {
- this.color = color;
- this.weight = weight;
- }
- public void setColor(String color) {
- this.color = color;
- }
- public void setWeight(double weight) {
- this.weight = weight;
- }
- public String getColor() {
- return color;
- }
- public double getWeight() {
- return weight;
- }
- }
- package Object类.Exer;
-
- import java.awt.*;
-
- public class Circle extends GeometricObject{
- private double radius;
- public Circle() {
- /* this.color="white";
- this.weight=1.0;*/
- /*super("white",1.0);*/
- //super();---隐式
- this.radius=1.0;
- }
- public Circle(double radius) {
- this.radius = radius;
- }
- public Circle(String color, double weight, double radius) {
- super(color, weight);
- this.radius = radius;
- }
- public void setRadius(double radius) {
- this.radius = radius;
- }
- public double getRadius() {
- return radius;
- }
- public double findArea(){
- return Math.PI*radius*radius;
- }
-
- /*
- public boolean equals(Object obj){
- return (this==obj)
- }
- */
- //重载
- public boolean equals(Circle c){
- return this.radius==c.radius;
- }
- public String toString(){
- return "圆的半径为:"+radius+" 圆的面积为:"+findArea();
- }
- }
- package Object类.Exer;
-
- public class Test {
- public static void main(String[] args) {
- /*Circle c1=new Circle();//本态
- Circle c2=new Circle();*/
- //多态形式创建对象
- GeometricObject c1=new Circle();
- GeometricObject c2=new Circle();
-
- System.out.println(c1.equals(c2));
- System.out.println(c1);
- System.out.println(c2);
- }
- }
Exer:
- package Object类.Exer1;
-
- import com.sun.org.apache.bcel.internal.generic.RET;
-
- public class MyDateTest {
- public static void main(String[] args) {
- MyDate md1=new MyDate(2021,12,5);
- MyDate md2=new MyDate(2021,12,5);
- System.out.println(md1.equals(md2));
- System.out.println(md1);
- System.out.println(md2);
- }
-
- }
- class MyDate{
- private int year;
- private int month;
- private int day;
-
- public MyDate() {
- }
-
- public MyDate(int year, int month, int day) {
- this.year = year;
- this.month = month;
- this.day = day;
- }
-
- public void setYear(int year) {
- this.year = year;
- }
-
- public void setMonth(int month) {
- this.month = month;
- }
-
- public void setDay(int day) {
- this.day = day;
- }
-
- public int getYear() {
- return year;
- }
-
- public int getMonth() {
- return month;
- }
-
- public int getDay() {
- return day;
- }
- public boolean equals(Object obj){
- if (this==obj){
- return true;
- }
- if (obj instanceof MyDate){//instanceof一般用于对象类型强制转换
- MyDate md=(MyDate) obj;
- if (this.year==md.year&&this.month==md.month&&this.day==md.day) {
- return true;
- }
- }
- return false;
- }
- public String toString(){
- return year+"年"+month+"月"+day+"日";
- }
-
- }