Questa risposta è eccezionale e vera.
Volevo aggiungere che in alcuni casi i compromessi sono stati creati per l'usabilità.
Gli oggetti di tipo String possono essere istanziati senza nuovo, evento quando String non è una primitiva:
String s = "Hello";
String essendo un non-primitivo, dovrebbe essere istanziato in questo modo:
String s = new String("Hello"); // this also works
Ma il compilatore consente l'opzione OO più breve, meno, perché la stringa è di gran lunga la classe più utilizzata nell'API.
Anche gli array possono essere inizializzati in modo non OO:
int i[] = {1,2,3};
Stranamente, un oggetto è un'istanza di una classe o di un array . Gli array di significato sono un tipo di classe completamente separato.
Le matrici hanno un campo pubblico length
che non è una costante. Inoltre non c'è documentazione sugli array di classe sono un'istanza di. (non confondere con la classe Arrays o java.reflect.Array).
int a = myArray.length; // not length()