Java学习之to_String(), equals()
-
to_String:
-
返回的是一个字符串
-
任何一个类都默认继承了Object类,toString()方法在Object内
-
可以重写toString()
-
class A
{
}
class TestA
{
public static void main(String[] args)
{
A aa = new A();
System.out.printf("%s \n", aa.toString());
//打印出的结果是 A@de3ca2f,A是类名,后面6/8个是类对象地址的16进制 P58讲
//若改为("%s \n", aa); 输出结果一样
}
}
-
equals:
-
equals()也是在类Object里面
-
所以所有类都可以调用equals
-
它用来判断两个对象的内存地址是否一样,返回值是true/false
-
class A
{
public A(int i)
{
this.i = i;
}
}
class Testequals
{
public static void main(String[] args)
{
A a1 = new A(2);
A a2 = new A(2);
System.out.println( a1.equals(a2));//判断a1 a2内存地址是否相同
//虽然两个对象所指堆中保存的值一样,但是地址不同
// 会返回 false
}
}
- 如何重写equals():
重写equals的目的就是让两个做对比的是一样的,即返回true
重写如下:
class A
{
public int i;
public A(int i)
{
this.i = i;
}
public boolean equals(Object obj) //一定要有public
{
//因为上面传入的参数a2本身已是子类对象,
//所以这里不用写 Obj aa == new A();
A aa = (A)obj; //将父类对象obj(此时obj是a2子类对象/引用)强制转换成子类的引用
if(this.i == aa.i) //if ( 当前对象的 i 与 obj 的i相等)
return true;
else
return false;
}
}
- 注意:
上面不能写 if (this.i == obj.i),因为父类对象不能直接调用子类特有的属性/方法(成员)
测试看看是否重写了equals:
String a1 = "123";
String a2 = "123";
System.out.println(a1.equals(a2));
//返回的是true, 说明类String 中的equals方法已经重写了
对于字符串,equals() 比较的是字符串对象指向的内容,而不是对象本身。