Within an instance method or a constructor, the Java keyword this refers to the implicit parameter. The implicit parameter is the object on which on a method was called (the one to the left of the dot (.)).

The demonstrations on this page use the Coordinate2D class. There are no tricks in the Coordinate2D class. Each method does what its header suggests.

Selected parts of Coordinate2D are shown below.

A link to the complete class is below.

Coordinate2D.java

Using the this keyword to distinguish between variables

The Coordinate2D constructor with parameters uses initX and initY as the parameter names. The parameter names differ from the names of the instance variables x and y.

The constructor could be written as:

public Coordinate2D(int x, int y)
{
    this.x = x;
    this.y = y;
}

When the name of a parameter or local variable is the same as the name of an instance variable, the this keyword can be used to refer to the instance variable. In the modified constructor above, this.x refers to the instance variable.

A parameters or local variable with the same name as an instance variable takes precedence within its own scope. In the modified constructor above, x refers to the parameter.

Using this to pass the implicit parameter as an argument

The code from theCoordinate2D method getDistance could be moved into the CoorUtility class method getDistanceBetween. (This is a contrived example but assume the programmer wants to move the code.)

public class CoorUtility
{
    public static double getDistanceBetween(Coordinate2D a, Coordinate2D b)
    {
        int xSqrd = a.getX() - b.getX();
        xSqrd *= xSqrd;
        
        int ySqrd = a.getY() - b.getY();
        ySqrd *= ySqrd;
        
        return Math.sqrt(xSqrd + ySqrd);
    }
}

getDistanceBetween is a static method of CoorUtility. It accepts 2 parameters, each of type Coordinate2D, and returns the distance between them.

Removing the getDistance method from the Coordinate2D class would break any client code that called the method. To avoid breaking client code, the Coordinate2D method getDistance can be updated to call the CoorUtility method getDistanceBetween.

public double getDistance(Coordinate2D otherCoor)
{
    return CoorUtility.getDistanceBetween(this, otherCoor);
}

The keyword this is used to pass the implicit parameter (the object on which getDistance was run) as an argument to getDistanceBetween.

Consider the main method below.

public static void main(String[] args)
{
    Coordinate2D c1 = new Coordinate2D(5, 8);
    Coordinate2D c2 = new Coordinate2D(10, 12);
    
    System.out.println(c1.getDistance(c2));
    System.out.println(CoorUtility.getDistanceBetween(c1, c2));
}

The call c1.getDistance(c2) uses c1 as the implicit parameter and c2 as the explicit parameter (argument). Within getDistance, this corresponds to c1 and otherCoor corresponds to c2.

In the call CoorUtility.getDistanceBetween(c1, c2) both c1 and c2 are passed as arguments.

The main method prints:

6.4031242374328485
6.4031242374328485

Additional uses of the this keyword

More uses of the this keyword demonstrates:

Help & comments

Get help from AP CS Tutor Brandon Horn

Comment on this keyword