关于equals()和toString()方法
2015-10-10 10:56
281 查看
一 :
equal() :
/*******************************************************
<1>Object类的equlas方法源码:
* <2>像String类,包装类,File类,Date类都重写了Object类的equals方法,
其比较的是两个对象的“实体内容”是否完全相同
String类的equals()方法源码如下:
<3>代码示例一如下:
person的代码示例如下:
代码示例二如下:
附一张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()方法;
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()方法;
相关文章推荐
- 在Java中,关于线程的创建,方法及生命周期
- spark机器学习中安装ipython步骤
- RandomAccessFile的使用
- 对象流的使用
- 关于标准输入输出流及转换流的使用
- 关于缓冲流的使用
- 关于文件流的使用
- File类的常用方法
- 自定义枚举类及使用enum的枚举类
- 关于泛型的使用
- Collections工具类的使用
- 关于Map接口的方法的使用及其Map下的子类的使用
- 移除VS2005方案中的Visual SourceSafe绑定信息
- Set接口常见的使用方法
- ArrayList常见的使用方法
- 比较ArrayList、LinkedList、Vector
- java集合的体系
- Java的JUnit
- Collection接口常用的方法
- Java的包装类,基本数据类型和String类之间的转化