Weder wird teurer sein, wenn Sie Bytecode betrachten. Ich würde mich stattdessen über den massiven Overhead des Konstruierens und Werfens von ClassCastExceptions
Gedanken machen, was in beiden Fällen passiert, , wenn die Besetzung fehlschlägt. Auf jeden Fall wird dir instanceof
auch nicht besonders weh tun, und du wirst mit weniger Leistungseinbußen davonkommen, wenn die Besetzung nicht stattfinden kann.
public static void main(java.lang.String...);
Code:
0: ldc #2 // String a
2: astore_1
3: getstatic #3 // Field java/lang/System.out:Ljava/io/PrintStream;
6: aload_1
7: checkcast #4 // class java/lang/String
10: invokevirtual #5 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
13: return
und Gießen eine Klasse zu einer Unterklasse:
Hier eine Variable als CharSequence
(Schnittstelle) zu String deklariert Gießen
public static void main(java.lang.String...);
Code:
0: new #2 // class A$B
3: dup
4: invokespecial #3 // Method A$B."<init>":()V
7: astore_1
8: getstatic #4 // Field java/lang/System.out:Ljava/io/PrintStream;
11: aload_1
12: checkcast #2 // class A$B
15: invokevirtual #5 // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
18: return
}
Wie auch immer, hier ist die Wirkung von instanceof
:
public static void main(java.lang.String...);
Code:
0: new #2 // class A$B
3: dup
4: invokespecial #3 // Method A$B."<init>":()V
7: astore_1
8: aload_1
9: instanceof #2 // class A$B
12: ifeq 25
15: getstatic #4 // Field java/lang/System.out:Ljava/io/PrintStream;
18: aload_1
19: checkcast #2 // class A$B
22: invokevirtual #5 // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
25: return
Wie Sie sehen können, ist es nur ein zusätzlicher Bytecode operati on (die in der Regel nur einige Elemente der Objektinstanz überprüft, so wie sie im Speicher vorhanden ist) und eine if-Anweisungsverzweigung.
tatsächlich gibt es Kosten. Diese Frage ist also für die Experten nicht Anfänger: http://www.javaworld.com/article/2076555/build-ci-sdlc/java-performance-programming--part-2--the-cost-of-casting. html –
Ich sehe Sie entfernen Sie Ihren Kommentar, der sagte, dass es keine Kosten gab. Sie sollten Ihre Down-Abstimmung für die Integrität entfernen. –
Könnten Sie sich meine Antwort ansehen und mir sagen, ob sie Ihre Frage beantwortet oder ob Sie noch etwas geklärt haben? Ich stimme zu, dass die Downvotes nicht unbedingt gerechtfertigt sind, aber der Versuch, sie zu entfernen, wird wahrscheinlich nicht mit extremer Effizienz gelingen. – hexafraction