2009-06-24 43 views

Respuesta

41

El Java Language Specification indica que los identificadores tienen una longitud ilimitada.

En la práctica, el sistema de archivos limitará la longitud del nombre del archivo resultante.

+4

La especificación Java VM indica que cualquier cadena constante está restringida a 65535 bytes: http://java.sun.com/docs/books/jvms/second_edition/html/ClassFile.doc.html#88659 –

+1

Esto es de la segunda edición (igual que la respuesta de Jon). No hay tal referencia en la tercera edición. –

+0

Está allí en la edición Java SE8. – EJP

0

No. Java no impone ningún límite en el nombre de la clase. Pero si interactúa con otros sistemas (por ejemplo, JNI) es mejor estar en el lado seguro.

+0

Eso se llama ** comportamiento indefinido ** y parte mala de cualquier especificación)) – gavenkoa

27

65535 caracteres Creo. Desde el Java especificación de la máquina virtual:

La longitud de los nombres de campo y método, de campo y método descriptores y otros valores de cadena constante es limitada a 65535 caracteres por el elemento de longitud sin firmar de 16 bits de la estructura CONSTANT_Utf8_info (§4.4.7). Tenga en cuenta que el límite está en el número de bytes en la codificación y no en el número de caracteres codificados. UTF-8 codifica algunos caracteres usando dos o tres bytes. Por lo tanto, las cadenas que incorporan caracteres multibyte son más restringidas.

aquí:

http://docs.oracle.com/javase/specs/jvms/se5.0/html/ClassFile.doc.html#88659

+0

¿Tiene una referencia de este tipo para la tercera edición? No puedo encontrar uno. –

+10

65535 es una limitación de la JVM no del idioma en sí – jitter

+0

Es cierto que es un límite específico de la JVM ... – Jon

3

con JDK 1.5, el límite práctico para los nombres de clase en Windows XP con 255 - más largos nombres dio errores en el sistema de archivos. Este era el nombre completo (directorio + paquete + clase).

No he probado JDK 1.6 en Vista o windows 7, con suerte Sun lo fijó en el límite NTFS de 8000 o menos.

+0

¿Alguien sabe la respuesta a JDK 1,6+? – ycomp

Cuestiones relacionadas