5
Long l1 = null;
Long l2 = Long.getLong("23");
Long l3 = Long.valueOf(23);

System.out.println(l1 instanceof Long);  // returns false
System.out.println(l2 instanceof Long);  // returns false
System.out.println(l3 instanceof Long);  // returns true

返された出力を理解できませんでした。少なくとも 2 番目と 3 番目の syso には本当のことを期待していました。誰かが instanceof の仕組みを説明できますか?

4

6 に答える 6

16

これは とは関係ありませんinstanceof。このメソッドLong.getLong()は文字列を解析せず、その名前のシステム プロパティの内容を long として解釈して返します。23 という名前のシステム プロパティがないため、null が返されます。あなたがしたいLong.parseLong()

于 2010-01-28T11:06:48.150 に答える
11

l1 instanceof Long

l1is nullであるため、instanceoffalseを返します (Java 言語仕様で指定されているとおり)

l2 instanceof Long

間違ったメソッドを使用しているため、これはfalsegetLongになります。

Determines the long value of the system property with the specified name.

于 2010-01-28T11:06:04.700 に答える
7

Long.getLong(..)システム プロパティの long 値を返します。null「23」という名前のシステムプロパティがないため、あなたのケースでは返されます。そう:

  • 1 と 2 はであり、 null を比較するnullinstanceof返されますfalse
  • 3 はjava.lang.Long( を出力して確認できますl3.getClass()) なのでtrue期待通りです

を使用する代わりに、 をLong.getLong(..)使用Long.parseLong(..)して を解析しStringます。

于 2010-01-28T11:07:42.153 に答える
1

SOPを次のように書き換えることができると思います:

System.out.println(l1 != null && l1 instanceof Long);
System.out.println(l2 != null && l2 instanceof Long);
System.out.println(l3 != null && l3 instanceof Long);

いつものように、何もnullすることはできませんinstanceof

于 2010-01-28T11:14:26.277 に答える
0

のインスタンスは、検査中のオブジェクトのタイプをチェックします。

最初の 2 つは null 値になり、false が返されます。3番目のものには、trueを返すLongオブジェクトがあります。

instaceof の詳細については、次の Java 用語集サイトを参照してください: http://mindprod.com/jgloss/instanceof.html

于 2010-01-28T11:08:24.310 に答える