zoukankan      html  css  js  c++  java
  • 对于Java对象的几点疑惑解答

    1  直接输出一个类的对象

    众所周知,我们创建一个对象后,可以利用print()方法把该对象的属性给输出,但是我们若直接输出对象呢?比如下例:

     1 class People {
     2     String name;
     3     int age;
     4 }
     5 
     6 public class Main {
     7     public static void main(String[] args) {
     8         People a1=new People();
     9         a1.name ="李明";
    10         a1.age=21;
    11         System.out.println(a1);
    12     }
    13 }

    不废话,直接看结果吧,结果是下面的东西:

    People@15db9742

    这是什么呢?Java中直接输出一个类的对象的时候,会调用这个类的toString()方法,自己写的类没有覆盖这个方法的话就是继承Object类的这个方法,Object中toString()方法的实现

    是这样的:getClass().getName() + "@" + Integer.toHexString(hashCode())。后面跟的是这个类的哈希码值,如果希望这个类打印出你希望的格式,你就要覆盖toString方法。

    2  重写toString方法

    接下来覆盖toString方法,看一下会有什么变化:

     1 class People {
     2     String name;
     3     int age;
     4     @Override
     5     public String toString() {//覆盖toString方法
     6         return "People [name=" + name + ", age=" + age + "]";
     7     }
     8 }
     9 
    10 public class Main {
    11     public static void main(String[] args) {
    12         People a1=new People();
    13         a1.name ="李明";
    14         a1.age=21;
    15         System.out.println(a1);
    16     }
    17 }

    结果如下:

    People [name=李明, age=21]

    这就是覆盖了toSting方法,输出当前该对象中所有的属性了。

    3  直接比较两个对象

    我们要比较两个对象,怎么比较呢?先看下面的例子:

     1 class People {
     2     String name;
     3     int age;
     4 }
     5 
     6 public class Main {
     7     public static void main(String[] args) {
     8         People a1=new People();
     9         a1.name ="李明";
    10         a1.age=21;
    11         People a2=new People();
    12         a2.name ="李明";
    13         a2.age=21;
    14         System.out.println(a1.equals(a2));
    15     }
    16 }

    创建两个People对象,对象中的属性都相同,两个对象相等吗?答案是false。很疑惑?因为进行两个对象的比较,要重写equals方法。

    4  重写equals方法

    不要着急,接着看下面的例子:

     1 class People {
     2     String name;
     3     int age;
     4     @Override
     5     public boolean equals(Object obj) {//重写equals方法
     6         if (this == obj)
     7             return true;
     8         if (obj == null)
     9             return false;
    10         if (getClass() != obj.getClass())
    11             return false;
    12         People other = (People) obj;
    13         if (age != other.age)
    14             return false;
    15         if (name == null) {
    16             if (other.name != null)
    17                 return false;
    18         } else if (!name.equals(other.name))
    19             return false;
    20         return true;
    21     }
    22 }
    23 
    24 public class Main {
    25     public static void main(String[] args) {
    26         People a1=new People();
    27         a1.name ="李明";
    28         a1.age=21;
    29         People a2=new People();
    30         a2.name ="李明";
    31         a2.age=21;
    32         System.out.println(a1.equals(a2));
    33     }
    34 }

    这次输出的结果是true。

    【注】两个对象的所有属性必须相同,才会输出true!

    【注】不要看到重写方法里面那么长的代码,根本不需要我们去写,Eclipse里面会自动生成,在“源码”菜单栏下。

  • 相关阅读:
    继承实战
    工厂设计模式
    接口匿名内部类
    枚举类
    接口.匿名内部类
    学生信息管理系统(bug)
    System类
    1.1 计算机基础知识 & jdk 安装 & 标识符
    DedeCMS 在子栏目或内容页,调用所在顶级栏目的栏目名
    latex 中 section 标题中如何插入特殊符号
  • 原文地址:https://www.cnblogs.com/qijunhui/p/8284313.html
Copyright © 2011-2022 走看看