对于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里面会自动生成,在“源码”菜单栏下。

posted @ 2018-01-14 20:52  祁俊辉  阅读(155)  评论(0编辑  收藏  举报