En C++, si necesita modificar 2 objetos, puede pasar por referencia. ¿Cómo se logra esto en Java? Supongamos que los 2 objetos son tipos primitivos como int.Pasando por referencia en Java?
Respuesta
No puede. Java no admite el paso de referencias a variables. Todo se pasa por valor.
Por supuesto, cuando una referencia a un objeto se pasa por valor, apuntará al mismo objeto, pero esto no está llamando por referencia.
Usando genéricos puede crear una clase de puntero que lo haría al menos algo menos doloroso. Usted pasa el objeto, cambia su propiedad de valor y cuando la función sale de su objeto contendrá el nuevo valor.
MyPointerClass<int> PointerClass = new MyPointerClass<int>(5);
myFunction(PointerClass);
System.out.println(PointerClass.Value.toString());
// ...
void myFunction(myPointerClass<int> SomeValue)
{
SomeValue.Value = 10;
}
Java no tiene pase por referencia, pero todavía se puede mutar objetos a partir de esas referencias (que a su vez se pasan por valor).
java.util.Arrays.fill(int[] arr, int val)
- llena una matrizint
con unint
valor dadojava.util.Collections.swap(List<?> list, int i, int j)
- permutas de dos elementos de una listaStringBuilder.ensureCapacity(int min)
- explica por sí mismo
Como se puede ver, aún puedes modificar objetos (si no son inmutables); simplemente no puede modificar referencias o primitivas pasándolas a una función.
Por supuesto, puede convertirlos en campos de un objeto y pasar esos objetos alrededor y configurarlos para lo que desee. Pero eso aún no pasa por referencia.
Envuélvalos en un objeto y luego pase ese objeto como un parámetro al método.
Por ejemplo, el siguiente código C++:
bool divmod(double a, double b, double & dividend, double & remainder) {
if(b == 0) return false;
dividend = a/b;
remainder = a % b;
return true;
}
puede reescribirse en Java como:
class DivRem {
double dividend;
double remainder;
}
boolean divmod(double a, double b, DivRem c) {
if(b == 0) return false;
c.dividend = a/b;
c.remainder = a % b;
return true;
}
Aunque estilo más idiomática en Java sería crear y devolver este objeto desde el método en lugar de aceptarlo como parámetro:
class DivRem {
double dividend;
double remainder;
}
DivRem divmod(double a, double b) {
if(b == 0) throw new ArithmeticException("Divide by zero");
DivRem c = new DivRem();
c.dividend = a/b;
c.remainder = a % b;
return c;
}
- 1. java - pasando un valor doble por referencia
- 2. Pasando vectores por referencia
- 3. Pasando número entero por referencia
- 4. C++ pasando por const referencia
- 5. Pasando matrices por valor y por referencia
- 6. Pasando parámetro opcional por referencia en C++
- 7. Pasando por referencia a un constructor
- 8. pasando enumeraciones por ref en java
- 9. Pasando objeto funtor por valor vs por referencia (C++)
- 10. ¿Pasa Java por referencia?
- 11. pasando una referencia escalar en Perl
- 12. Función de mapa Python, pasando por referencia/valor?
- 13. Pasando el parámetro de objeto a un funtor por referencia
- 14. Pasando el argumento del puntero por referencia bajo C?
- 15. pase de Java por referencia
- 16. ¿Puedo pasar parámetros por referencia en Java?
- 17. Java generics pasando parámetros
- 18. Pasando argumentos por valor o por referencia en el objetivo C
- 19. Pasando por ref?
- 20. REST pasando Parámetros con Java
- 21. Creando un objeto en la pila pasando luego por referencia a otro método en C++
- 22. Creando/Pasando Java Bean Datasource en JasperReport
- 23. Pasando referencia de objeto en Visual Basic (VBA)
- 24. ¿Puedo reducir la asignación de memoria pasando el parámetro DateTime por referencia en C#?
- 25. pase por referencia C++
- 26. Al pasar datos primitivos por referencia en Java
- 27. Clase pasando por cuenta propia
- 28. JNI: pasando bytes de C++ a java
- 29. Pasando por la referencia HTTP (Sitio A, B, C - A a C)?
- 30. referencia directa ilegal en java
Este es un duplicado de http://stackoverflow.com/questions/589919/doe s-java-pass-by-reference – Zxaos