Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

300
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!