Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

301
Visualizações
Usando 'esto' en el constructor y otros métodos en Java, ¿cuándo está bien omitirlo?

Soy nuevo en Java, así que perdónenme si es una pregunta estúpida. Traté de encontrar una respuesta clara en este foro pero sin alegría.

Sé lo que es 'esto' . Sabe que se refiere a una instancia real y ayuda a delimitar el contexto cuando se dirige a una variable, pero descubrí que es posible ejecutar el código sin ningún problema a pesar de no usar la frase 'esta' . Resulta que depende de cómo nombre sus parámetros cuando declara métodos. Como puede ver a continuación, el código devuelve 'nulo' si mi parámetro tiene el mismo nombre que el estado que estoy inicializando/modificando.

Esto funciona solo en la clase donde se declaran las variables. Todavía tendría que usar 'esto' en cualquier subclase, si intentara acceder/modificar una variable declarada en su clase principal.

Ahora bien, ¿se consideraría esto incorrecto y debería evitarse aunque parezca funcionar bien?

¡Gracias!

 class Student { protected String name; protected int age; protected String course; public Student(String passName, int passAge, String course) { name = passName; age = passAge; course = course; // here my parameter is named the same as the state and it will return 'null' unless we use 'this' } public void update(String newName, int newAge, String newCourse) { name = newName; age = newAge; course = newCourse; // here I set the name of my parameter to be different and it works } public void display() { System.out.println("Name: " + name + "\n Age: " + age + "\n Course: " + course + "\n"); } public static void main(String[] args) { Student s1 = new Student("John", 20, "Java 101"); s1.display(); s1.update("Johnny", 21, "Java 101"); s1.display(); } }

Producción:

 Name: John Age: 20 Course: null Name: Johnny Age: 21 Course: Java 101
over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Como notó, si le da a una variable de instancia el mismo nombre que un argumento de constructor, la asignación como

 course = course;

no inicializa la variable de instancia, ya que el argumento del constructor course que es una variable local, oculta la variable de instancia del mismo nombre. Está asignando la variable local a sí misma.

Por lo tanto, la variable de instancia permanece null .

tendrás que escribir

 this.course = course;

para que la asignación funcione.

Si, por otro lado, el nombre de la variable de instancia es diferente del nombre del argumento del constructor, puede asignar el argumento del constructor a la variable de instancia sin usar el prefijo this .

ambas cosas

 course = newCourse;

y

 this.course = newCourse;

funcionaría bien

Tenga en cuenta que usar el prefijo this incluso cuando no es obligatorio tiene la ventaja de detectar errores.

Por ejemplo, si escribiste por error

 newCourse = course;

el compilador no se quejará, pero la variable de instancia de su course no se inicializará.

Por otro lado, si escribiste por error

 this.newCourse = course;

el compilador dará un error de compilación, ya que newCourse no es una variable de instancia.

over 4 years ago · Santiago Trujillo Relatório

0

Creo que debería leer la documentación oficial sobre la palabra clave "esta".

Uso de this con un campo La razón más común para usar esta palabra clave es que un campo está sombreado por un método o parámetro de constructor.

Por ejemplo, la clase Point se escribió así

 public class Point { public int x = 0; public int y = 0; //constructor public Point(int a, int b) { x = a; y = b; } }

pero podría haberse escrito así:

 public class Point { public int x = 0; public int y = 0; //constructor public Point(int x, int y) { this.x = x; this.y = y; } }

Cada argumento del constructor sombrea uno de los campos del objeto: dentro del constructor x hay una copia local del primer argumento del constructor. Para hacer referencia al campo Point x, el constructor debe usar this.x.

Sobre tu pregunta:

Ahora bien, ¿se consideraría esto incorrecto y debería evitarse aunque parezca funcionar bien?

Depende del estilo de código que tenga en sus proyectos o equipos. Técnicamente, ambas formas son posibles y correctas, usar name = newName es más corto y usar this.name = name es más seguro para evitar errores.

over 4 years ago · Santiago Trujillo Relatório

0

Es el nombre de la variable lo que cuenta. Java siempre usa la variable en el ámbito más cercano disponible, por lo que si usa un parámetro con el mismo nombre, usará el parámetro. Para evitar eso, debe calificar el campo con this . Aquí (código irrelevante eliminado):

 public Student(String course) { course = course; }

usted asigna el valor del course al parámetro course , por lo que el course de campo permanece sin cambios. Por ejemplo, si haces esto:

 public Student(final String course) { course = course; }

no se compilará porque la palabra clave final significa que no puede asignar un nuevo valor a la variable (en este caso, parámetro course ).

Entonces necesita usar this para asignar al campo.

 public Student(final String course) { this.course = course; }

Nunca es "incorrecto" usar this , pero podría considerar una buena práctica no nombrar los parámetros de la misma manera que los campos de todos modos (y hay advertencias para activar en los IDE si lo hace, para evitar exactamente eso).

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda