您的位置:首页 > 其它

关于equals()和toString()方法

2015-10-10 10:56 281 查看
一 :

 equal() :   


/******************************************************* 

 <1>Object类的equlas方法源码:

public boolean equals(Object obj) {
return (this == obj);
}


* <2>像String类,包装类,File类,Date类都重写了Object类的equals方法,

其比较的是两个对象的“实体内容”是否完全相同

String类的equals()方法源码如下:

public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String) anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}


<3>代码示例一如下:
package com.atguigu.java1;

public class TestEquals {
public static void main(String[] args) {
//	 TestEquals t = new TestEquals();
//	 t.test1();

//equals():
//①只能处理引用类型变量②在Object类,发现equals()仍然比较的两个引用变量的地址值是否相等
//java.lang.Object类,是所有类的根父类

Person p1 = new Person();
Person p2 = new Person();
System.out.println(p1.equals(p2));//false  // 因为person类未重写,所以仍继承Object类的equals()方法;
System.out.println(p1==p2);//false

//像String 包装类 File类 Date类这些重写Object类的equals()方法,比较是两个对象的
//"实体内容"是否完全相同。
String str1 = new String("AA");
String str2 = new String("AA");
System.out.println(str1 == str2);//false
System.out.println(str1.equals(str2));//true
}

public void test1() {
// ==
// 1.基本数据类型:根据基本数据类型的值判断是否相等。相等返回true,反之返回false
// 注:两端数据类型可以不同,在不同的情况下,也可以返回true。
// 2.引用数据类型:比较引用类型变量的地址值是否相等。
int i = 12;
int j = 12;
System.out.println(i == j);// true
char c = 12;
System.out.println(i == c);// true
float f = 12.0F;
System.out.println(i == f);// true

int k = 65;
char a = 'A';
System.out.println(k == a);// true

Object obj1 = new Object();
Object obj2 = new Object();
System.out.println(obj1);
System.out.println(obj2);
System.out.println(obj1 == obj2);// false

Person p1 = new Person();
Person p2 = new Person();
Person p3 = p1;
System.out.println(p1 == p2);// false
System.out.println(p1 == p3);// true
}
}


person的代码示例如下:

package com.atguigu.java1;

public class Person {
private String name;
private int age;
int id = 1001;
public Person() {
super();
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}

public void walk(){
System.out.println("人走路");
}
public void eat(){
System.out.println("人吃饭");
}

}


代码示例二如下:
package com.atguigu.java;

public class TestEquals {
public static void main(String[] args) {
Person p1 = new Person("AA",12);
Person p2 = new Person("AA",12);
System.out.println(p1 == p2);
System.out.println(p1.equals(p2));

//关于String类
String str1 = "AA";
String str2 = "AA";
String str3 = new String("AA");
System.out.println(str1 == str2);//true
System.out.println(str1.equals(str2));//true
System.out.println(str1 == str3);//false
System.out.println(str1.equals(str3));//true
System.out.println(p1.name == p2.name);//true

}
}


附一张String类的内存图:



<4>对于自己写的类,可以在Eclipse中通过source --> Generate hashCode() and equals()...  自动生成;

二:

  toString() :

* (1)当我们打印一个对象的引用时,默认的打印的是一个对象的toString方法;

* (2)当我们打印的类没有重写Object类的toString()方法时,那么默认的就调用Object类的toString()方法;

* (3)当我们打印对象所在的类重写了toString()方法时,那么此时调用的就是我们重写的toString()方法;

* (4)常常我们重写toString()方法的格式为:将对象的属性信息打印出来;当然也可以通过Eclipse中的source导入;

* (5)像String,包装类,File类,Date类等,他们已经重写了toString()方法;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: