Hola,
Bueno, ya hemos visto para que sirve definir por qué se quito la aritmética de punteros

.
Cita:
Iniciado por GreenEyed
... Y no, la aritmética de punteros no se quitó por eso. Precisamente Java define un procesador virtual en la JVM donde en todas las arquitecturas todos los datos usan el mismo numero de bytes y el orden esta definido. ...
¿ Como se logró que en todas las arquitecturas todos los datos usaran el mismo numero de bytes y el orden estuviera definido ?
Ocultando al programador el acceso directo a memoria y los punteros.
El objetivo inicial de Java era portabilidad, y para eso era necesario eliminar todas las diferencias entres procesadores (incluyendo acceso directo a memoria o punteros).
Cita:
Iniciado por GreenEyed
... Y seguramente se puedan hacer virus en la JVM, pero como si no es atacando la JVM, tu codigo no puede atacar a otro por "overflow"....
Como dijiste anteriormente, semántica. Creo, que si pensaron en la seguridad, pero no era el objetivo principal al crearlo.
Saludos,
ps: El ejemplo clásico de mi punto de vista es el procesador Morotola y PowerPC con su "endianess" tipo "big-endian".
ps:
Para comprender realmente este concepto hay que entrar en detalle como funciona el procesador, las instrucciones de código de maquina, y los punteros que existen en lenguaje assembler. Por ejemplo en x86: mov ax,[bx] o en RISC: li $v0,(10) ; y como Java elimina ese problema, creando diferentes VM para cada arquitectura de hardware, que muestren simplemente java.lang.Integer i = 10; sin importar si bx es 16, 32 o 64 bits. (O inclusive $v0 es de 64 bits). Y asegurando que java.lang.Integer va a ser de 32 bits.
Y como está fuera de contexto en el foro de Java. Cada quien saque sus propias conclusiones.