を期待していることがgetWindow
ウィンドウを記述する新しいJSObject
を返すことが表示されます。したがって、getWindow
への各呼び出しは新しいインスタンスですが、同じデータであるため、equalsはfalseを返します。どちらのJSObjectもウィンドウを記述しますが、同じオブジェクトではありません。
public class MyClass
{
int a;
public MyClass(int arg)
{
a = arg;
}
public MyClass getMyClass()
{
return new MyClass(a);
}
public static void main(String args[])
{
MyClass parent = new MyClass(1);
MyClass obj1 = parent.getMyClass();
MyClass obj2 = parent.getMyClass();
System.out.println(obj1.equals(obj2));
}
}
これは、オブジェクトが同じ値を持っていても、依然として異なるオブジェクトであるため、falseを出力します。
編集:get
メソッドを使用して明確にしました。
"両方のJSObjectがウィンドウを記述しますが、同じオブジェクトではありません" - JSObject.equals()はドキュメントの説明どおりに動作せず、2つのJSObjectインスタンスが同じものを参照するかどうかを判断する方法はありませんJavascriptオブジェクト? – snorbi
これは説明どおりに機能します。この例では、obj1とobj2の両方に同じデータ '1'があります。あなたと同じように、両方のgetWindow呼び出しからのJSObjectは同じデータを持ちますが、同じオブジェクトではありません。 2つの同一のコピーがありますが、それらはまだ2つのオブジェクトです。 '同じインスタンスを参照する 'は、異なる名前を持つ同じオブジェクトであればtrueを返し、同じ情報を持つ異なるオブジェクトであればfalseを返します。 – Thomas
"これはfalseを出力します" - これはMyClassクラスでequals(およびhashCode)がオーバーライドされていないためです。しかし、ドキュメントに基づいて、JSObject.equals()は私が期待したとおりに動作するはずです。ドキュメントの他の部分では、「JSObjectの2つのインスタンスを比較するために==演算子を使用することはできません.JSObject.equalsを使用してください。 – snorbi