Varios objetos del mismo tipo comparten espacios de RAM?
> ¿ Qué tienen que ver los value types con el uso de punteros, indocumentado ?
Wow. Primera vez que te leo admitir la existencia de algo que no se encuentra en java en la versión actual. Vamos mejorando.
Acá te lo explica el peladito impotente de oracle: https://www.jesperdj.com/2015/10/04/project-valhalla-value-types/
The major difference between these is that a variable of a primitive type directly contains the value, for example a variable of type int contains a 32-bit value of type int, while a variable of a reference type has a level of indirection; it doesn’t contain the content of an object itself, but the address of an object that’s stored somewhere in memory
> ¿ Cómo crees que se accede a cualquier valor en el stack si no es mediante el uso de un puntero (repito, indirección) ?
Idem respuesta de arriba. No estamos hablando de como se almacenan los tipos en el stack, sino de cual es su representación interna. Una referencia a un Value Type es una referencia a un valor. Una referencia a un Reference Type es una referencia al header, que a su vez tiene otras referencias. O sea, como dice el peladito este, "a level of indirection".
> ¿ Tú haces tus programas usando solamente value types ?
No, pero los tengo disponibles y los aprovecho cuando se necesitan. Esto es algo que la gente de java (que vive en 1999) no entiende. Tampoco "hago programas" usando 100% del tiempo LINQ, pero es una herramienta espectacular, que por supuesto es muy preferible tenerla a no tenerla. Lo mismo con la lista de los 30 features de lenguaje con la que te paliceé el otro día (y que por cierto todavía no me respondiste).
> ¿ De verdad nunca usas herencia, en POO ?
Por supuesto que si, pero al contrario de java, estas NO son las únicas herramientas y abstracciones que tengo a mi disposición. Por ejemplo: el hecho de que el ecosistema de .NET haya "crecido" los últimos 15 años, con C# teniendo soporte a nivel de lenguaje para funciones (algo que java recién implementó en la versión 8 hace relativamente poco) hace que haya cientos de casos donde NO se usa herencia para redefinir o extender el comportamiento de alguna clase. Similar a como se haría en un lenguaje funcional, hay muchas librerías y frameworks que usan funciones para componer funciones. Esto es java no existe y por lo tanto hay abuso de herencia todo el tiempo, ya que ésta es básicamente la única herramienta de abstracción que java provee. Podemos concluir que java, al igual que php, tiene un umbral de abstracción muchísimo más bajo que los lenguajes modernos.
> En java, un int de 32 bits sigue siendo un int de 32 bits si lo metes en un array
Yo veo esto como una limitación, y no como una ventaja. Dí un ejemplo sencillo, pero claramente las "colecciones" NO son el único uso para los generics, y por supuesto hay abstracciones para los que un simple array no es suficiente. Para todos esos casos, java genera un desperdicio de memoria, mientras los lenguajes modernos no.
> ¿ Te parece mal que un lenguaje orientado a objetos favorezca el uso de objetos frente al de primitivos ? Bueno, eso va por gustos
Me parece mal que en 2019 un lenguaje no tenga las herramientas y features necesarios para cubrir necesidades que en otros lenguajes están resueltas hace más de una década. Evidentemente a oracle también le parece mal esto, por eso están tratando de meter value types en java.
Seguí insultando, yo voy a seguir dando argumentos técnicos. A esta altura es evidente que tu nivel de conocimiento llega hasta java y gracias, mientras yo conozco y manejo una docena de lenguajes y no me quedé en 1999.