Introducción a los punteros en Java

Haider Ali 12 octubre 2023
  1. Puntero en Java
  2. Sin puntero en Java
  3. Alternativa: Referencias en lenguaje Java
  4. Desventajas de usar referencias como punteros en Java
Introducción a los punteros en Java

Hoy aprenderemos sobre los punteros en Java y cómo podemos obtener una ventaja al usarlos, pero antes de eso, veremos si están disponibles en Java; ¿si no, cuales son las alternativas?

Responderemos a todas estas inquietudes en este artículo. También compararemos punteros con otros lenguajes llamados C y C++.

Puntero en Java

Como sabemos, los punteros son objetos que almacenan una dirección de memoria. Son útiles en la gestión de direcciones y la asignación de memoria, pero solo funcionan si un idioma tiene aritmética de punteros.

Por lo general, los lenguajes tienen aritmética de punteros preprogramada, pero ese no es el caso con Java. Así que puede sonar un poco chocante para algunos que el lenguaje Java no tenga el concepto de punteros.

En cambio, el lenguaje Java tiene referencias como punteros. Recuerda que los punteros se pueden llamar referencias, pero no es lo mismo al revés, ya que las referencias no son punteros.

Analicemos este concepto en detalle con ejemplos más adelante en esta guía.

Sin puntero en Java

La mayoría afirma que Java está mejor sin punteros. Es por las razones que se mencionan a continuación.

  1. Aritmética: como se mencionó anteriormente, los punteros usan la aritmética para operar. Además, un puntero funciona con la gestión de la memoria, lo que es fundamentalmente inseguro.

    Muchos dirían lo contrario, pero es, de hecho, inseguro permitir que los punteros tengan acceso a la memoria. Por esta razón, Java no admite la aritmética de punteros. Y no se utiliza memoria adicional.

  2. Manipulación: es fácil que los usuarios hagan un mal uso de un puntero; manipular un objeto a través de un puntero también es muy arriesgado. Con todo, Java no requiere punteros en su Programación Orientada a Objetos.

    Además, agregar un puntero en el lenguaje Java provocaría un aumento innecesario de la complejidad.

Alternativa: Referencias en lenguaje Java

Como se mencionó anteriormente, el concepto de punteros no está disponible en Java. Entonces, en lugar de punteros, se usan referencias, ya que funcionan de la misma manera que los punteros.

El término puntero se refiere a los lenguajes C y C++. En Java, no podemos usar punteros, por lo que se usa un método alternativo llamado referencias. Como se mencionó, las referencias funcionan igual que un puntero, pero su uso es ligeramente diferente.

Cuando se usa una referencia, se hace usando una función. La copia de una referencia se copia en la pila de la función utilizada para llamar a un objeto y permite la manipulación del objeto como se desee.

Incluso si los usuarios quieren usar un puntero, son libres de usar Referencias. Aquí hay un ejemplo que explica el uso de Reference en Java.

class Shape {
  int length;
  int breadth;
}

public class ShapesUse {
  public static void main(String args[]) {
    /*
    Here, an example1 is used as a reference variable.
    Which means it holds the address of the Shapes object
    */
    Shape example1 = new Shape();

    /*
    example2 is another reference variable used,
    and example2 is initialized with example1
    example1 and example2 reference the same object,
    so no duplication and extra memory are used.
    */
    Shape example2 = example1;

    example1.length = 10;
    example2.breadth = 26;

    System.out.println("length of example 1 is: " + example1.length);
    System.out.println("breath of example 1 is: " + example2.breadth);
  }
}

En este ejemplo, se utilizan como referencias ejemplo1 y ejemplo2. Es porque contienen la dirección del objeto forma, ya través de este objeto se llama largo y ancho.

Recuerda que no podemos usar estas referencias fuera de este programa. A continuación se muestra el resultado del código anterior. Como podemos ver, las referencias funcionan como se desea.

Producción :

length of example 1 is: 10
breath of example 1 is: 26

Desventajas de usar referencias como punteros en Java

Veamos algunas desventajas de no tener un puntero en el lenguaje Java.

  1. Uso explícito: aunque las referencias se pueden usar como punteros, existe una desventaja. No podemos usar referencias explícitamente. No podemos usar estos punteros fuera del alcance del programa Java.

    Cualquier acción realizada mediante referencias está implícita, por lo que no son visibles. Es una gran desventaja ya que se utilizan punteros para acceder a los recursos, lo que podemos hacer explícitamente.

    En la programación C, podemos restar o agregar la dirección de un puntero para señalar cosas. Sin embargo, en Java, una referencia solo puede apuntar a una cosa.

  2. Control estricto: las referencias se controlan mucho más estrictamente que C o C++. Desafortunadamente, esto significa que la conversión de tipos no está disponible.

    Sin embargo, en punteros, podemos escribir cast, por ejemplo, int, a char. Pero en Java, las referencias solo pueden apuntar a un objeto del mismo tipo. Entonces, por ejemplo, solo podemos usar una referencia cadena para un objeto del tipo cadena.

Autor: Haider Ali
Haider Ali avatar Haider Ali avatar

Haider specializes in technical writing. He has a solid background in computer science that allows him to create engaging, original, and compelling technical tutorials. In his free time, he enjoys adding new skills to his repertoire and watching Netflix.

LinkedIn