¿Java pasa por valor o pasa por referencia o ambos? [duplicar

Esta pregunta ya tiene una respuesta aquí:

Es Java "paso por referencia" o "paso por valor"? 78 respuestas

onsidere el siguiente cas

    List<Integer> listOne = new ArrayList<>();
    List<Integer> listTwo = new ArrayList<>();
    listOne.add(1);I think this happens due to 
    listOne.add(2);
    listOne.add(3);
    Collections.reverse(listOne);
    listTwo = listOne;  //listTwo has same reference 
    Collections.reverse(listOne);
    System.out.println(listOne);  //out put [1, 2, 3] 
    System.out.println(listTwo);  // same out put

Java is pass by value, where values (for non primitive types) happen to be references. Creo que esto proporciona supervivencia para Java para este tipo de escenario. Para ser sincero, ¿por quéjava tratar de evitarpass by reference e intenta ser diferente desome of other languages? mientras que Java todavía sufre de conductas de referencia?

Edit: adicionalmente, por favor, alguien explique lo que sucede en el código anterior

Respuestas a la pregunta(4)

Su respuesta a la pregunta