Die ersten zwei verwenden rohe Typen. Das bedeutet, dass Ihre Liste überhaupt nicht typsicher ist. Mit dem Compiler können Sie Ganzzahlen speichern, auch wenn Sie eine Liste mit Strings haben möchten. Der Compiler gibt eine Warnung aus, die Sie nicht ignorieren sollten.
Die dritte ist richtig. Es teilt dem Compiler mit, dass Sie eine Liste von Zeichenfolgen verwenden möchten und dass die von Ihnen ausgewählte spezifische Implementierung ArrayList ist. Wenn Sie Ihre Meinung später ändern und eine LinkedList verwenden möchten, ist diese Codezeile die einzige, die Sie ändern müssen.
Die vierte sagt dem Compiler, dass Ihr Programm nicht nur eine Liste benötigt. Es benötigt diese Liste als ArrayList.Dies ist in Ordnung, wenn Ihr Code tatsächlich Methoden aufrufen muss, die für ArrayList spezifisch sind und nicht in der List-Schnittstelle vorhanden sind. Aber in 99,9% der Fälle ist das nicht der Fall und Sie sollten den dritten bevorzugen.
Die beiden letzten deklarieren eine Variable und initialisieren sie auf null, anstatt eine Liste zu erstellen. Das ist ein Designgeruch. Bevor Sie die Liste verwenden, müssen Sie sicherstellen, dass sie nicht null ist. Es ist viel sicherer, es sofort mit einer gültigen Liste zu initialisieren.
Siehe auch [* "Was ist der Unterschied zwischen diesen Arten der Initialisierung einer HashMap?" *] (Http://stackoverflow.com/q/26565606/2891664) – Radiodef