Me parece que llamar al string.length()
cada vez lleva mucho más tiempo que simplemente acceder a una variable.Si una cadena es inmutable, ¿por qué tiene que llamar a un método para obtener la longitud en lugar de simplemente acceder a una variable, como array.length?
Respuesta
String
implementa la interfaz CharSequence, que a su vez define el método length
. No podría hacer lo mismo con las variables ya que las variables no pueden ser abstractas o anuladas.
Como dicen otras personas, Java usa interfaces de forma exhaustiva.
+1 Buen punto ... – Daniel
Porque tener acceso a la variable le permitirá modificarlo, y para romper la cadena.
y el compilador JIT es inteligente suficiente como para inline del captador para usted, por lo que efectivamente se acaba accediendo solamente la variable de todos modos.
Ah, y array.length no es una variable de objeto "real", sino más bien una característica de idioma, que le permite acceder a la longitud de la matriz. Debido a esto, no se puede escribir. Las cadenas, por otro lado, son objetos "normales", y no se manejan de manera especial sea el compilador (aunque se construyen algo sobre la marcha cuando se utilizan literales de cadena en el código fuente).
Me parece que es sólo convención de java, que todos los miembros deben ser privados y sólo deben ser accesibles a través de los captadores y definidores. El problema es que si haces que Length sea público, puedes modificarlo y hacerlo inválido (no sé por qué lo harías, pero quién sabe).
C# cambia esto al permitirle crear propiedades con diferente accesibilidad para get y set, por lo que está permitido (en C# como mínimo).
es porque un String
es un objeto. Y los objetos generalmente tienen métodos en lugar de atributos.
Si el atributo era public
, también se puede modificarlo y que probablemente romper cosas.
Para encapsular.
Es una buena práctica tener una separación entre el API pública y los detalles de implementación. El uso de métodos (en lugar de acceder a las variables internas directamente) encapsula la implementación, lo que permite que se modifique en cualquier momento sin afectar a ningún código que ya se haya escrito.
No es porque sea inmutable. Incluso si fuera mutable, podrían devolver un final length
. La respuesta real es probablemente la supervisión.
- 1. ¿Por qué tengo que asignar una variable a f.readlines() para obtener su longitud?
- 2. En cuanto a rendimiento, ¿es mejor llamar la longitud de una matriz dada cada vez o almacenar la longitud en una variable y llamar esa variable cada vez?
- 3. ¿Por qué no puedo acceder a una variable local dentro de un método en Ruby?
- 4. ¿Cuál es el costo de llamar Array.length
- 5. ¿Es posible acceder a una variable de instancia a través de un método estático?
- 6. Llamar a un método como un método de extensión requiere más referencia que llamar directamente
- 7. ¿Por qué una matriz de longitud variable grande tiene un valor fijo -1 incluso si está asignada a C?
- 8. ¿Por qué String.length() es un método?
- 9. Usar una cadena para llamar a la función en Python
- 10. Convertir una cadena a variable
- 11. ¿Por qué es más rápido acceder al DOM a través de una variable en caché?
- 12. Comprobar si una enumeración tiene un campo que es igual a una cadena
- 13. ¿Es malo llamar a un método de clase como un método de una instancia?
- 14. ¿Cuál es la ventaja de que una cadena sea inmutable?
- 15. Llamar a un getter varias veces o llamar una vez y asignar a una variable?
- 16. ¿Por qué es posible llamar a un método/variable de CSharp protegido o privado?
- 17. utilizar una cadena de acceder a una variable local por su nombre
- 18. Javascript recortar una cadena a la longitud
- 19. ¿Por qué llamar a una función tan lenta (como strlen, count, etc.) en un valor referenciado?
- 20. Usar Reflection para llamar a un método de una propiedad
- 21. ¿Por qué Ruby me deja llamar a un método String sin especificar la cadena?
- 22. acceder al valor de una variable por su nombre como una cadena en Java
- 23. Mercurial: ¿Por qué a veces necesito fusionarme después de una extracción en lugar de simplemente actualizar?
- 24. ¿Por qué usar Proc.new para llamar a un método en una devolución de llamada de Rails?
- 25. ¿Por qué debemos asignar un clon a una nueva variable?
- 26. ¿Es mejor pasar una SqlConnection abierta como parámetro, o llamar a una nueva en cada método?
- 27. usando esto para llamar a una variable de instancia?
- 28. Cuándo utilizar el puntero a una clase y cuándo simplemente crear una instancia como una variable
- 29. ¿Cuál es la longitud máxima de una cadena en PHP?
- 30. Método La clase interna local solo puede acceder a la variable local final.¿Por qué?
Java parece tener acceso a todo a través de los métodos. La mejor pregunta es por qué no se accede a las longitudes de matriz a través de un método de longitud(). – Gravity