Strano comportamento java con i cast ai tipi primitivi

Questo probabilmente è stato chiesto da qualche parte ma non ho potuto trovarlo. Qualcuno potrebbe chiarire perché questo codice viene compilato e stampato 1 ?

 long i = (byte) + (char) - (int) + (long) - 1; System.out.println(i);