Las referencias de Java siempre apuntan a un objeto. El objeto tiene un encabezado que, entre otras cosas, identifica el tipo concreto (por lo que los lanzamientos pueden fallar ClassCastException
). Para las matrices, el inicio del objeto también incluye la longitud, los datos siguen inmediatamente después en la memoria (técnicamente, una implementación es libre de hacer lo que le plazca, pero sería una tontería hacer cualquier otra cosa). Por lo tanto, no puede; t tener una referencia que apunte en algún lugar de una matriz.
En C, los punteros apuntan a cualquier lugar y a cualquier cosa, y puede apuntar al centro de una matriz. Pero no puede emitir o averiguar con seguridad cuánto dura la matriz. En D, el puntero contiene un desplazamiento en el bloque de memoria y la longitud (o, de manera equivalente, un puntero al final, no recuerdo qué hace realmente la implementación). Esto permite que D corte las matrices. En C ++ tendrías dos iteradores apuntando al inicio y al final, pero C ++ es un poco extraño así.
Así que volviendo a Java, no, no puedes. Como se mencionó, NIO le ByteBuffer
permite ajustar una matriz y luego dividirla, pero ofrece una interfaz incómoda. Por supuesto, puedes copiar, lo que probablemente sea mucho más rápido de lo que piensas. Puede introducir su propia String
abstracción similar que le permite cortar una matriz (la implementación actual de Sun String
tiene una char[]
referencia más un desplazamiento inicial y una longitud, la implementación de mayor rendimiento solo tiene char[]
). byte[]
es de bajo nivel, pero cualquier abstracción basada en la clase que usted ponga hará un desastre horrible de la sintaxis, hasta JDK7 (tal vez).