Java学習to_String()、等しい()
-
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()もObjectクラスにあります
-
したがって、すべてのクラスが等しいを呼び出すことができます
-
2つのオブジェクトのメモリアドレスが同じかどうかを判断するために使用され、戻り値は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
}
}
- イコールを書き換える方法():イコールを書き換える
目的は、2つの比較を同じにする、つまり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;
}
}
- 注:
(this.i == obj.i)を上に書くことができない場合、親クラスオブジェクトは子クラスの特定のプロパティ/メソッド(メンバー)を直接呼び出すことができないため
等しいものを書き換えたかどうかをテストします。
String a1 = "123";
String a2 = "123";
System.out.println(a1.equals(a2));
//返回的是true, 说明类String 中的equals方法已经重写了
文字列の場合、equals()は、オブジェクト自体ではなく、文字列オブジェクトが指すものを比較します。