Understanding Strings, toString(), and equals() in Java

Sanjay R - May 17 - - Dev Community

Let's dive into the topic

Strings

  • A string is a class
  • It is from a package called Java.lang
  • String is immutable
  • The object is implicitly Created

Let's see some examples:

//creating objects for string
String s = new String();
System.out.println(s);
Enter fullscreen mode Exit fullscreen mode
output:
//empty
Enter fullscreen mode Exit fullscreen mode

In the above example, the output will be empty. But if we print an object of another class, some hashcode will be printed. For a String, Why is it not printing anything? Let's see about that.

Let's see some internal work.

Whenever an object is printed, Java internally calls the toString method which returns a string format.

//toString code

public class Object{

    public String toString(){
      return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }

}
Enter fullscreen mode Exit fullscreen mode

This is the internal code for the toString method. We can also override this method. The Object class is the parent class of every class. We can override the Object class methods unless they have the final or static keyword.

Let's get to the point.

In the String class, the toString method is written as:

// This object (already a string!) is returned. 

public String toString() {
    return this;
}
Enter fullscreen mode Exit fullscreen mode

It just returns the string itself. Now, since the string is empty, it prints the empty string.

Overriding the toString method

public class Test {
    @Override
    public String toString(){
        return "Espresso";
    }
    public static void main(String[] args) {
        Test a = new Test();
        System.out.println(a);
    }
}
Enter fullscreen mode Exit fullscreen mode
output:
Espresso
Enter fullscreen mode Exit fullscreen mode

We have overridden the toString method to print espresso every time we call toString.

equals()

It checks whether the two objects are the same. But if we think logically, two objects can't be the same. 

Here's an analogy: Imagine there are two phones from the same brand and model. Their properties may be the same, but that doesn't mean they are the same. They are two different physical objects. Likewise, we can't compare the two objects because the two objects are different and it is stored in separate memory locations. But we can compare their properties, and also we override the equals() method.

However, for the String class, the equals() method is overridden to compare the character sequences of the strings, rather than the object reference. This means that two different String objects with the same character sequence will be considered equal when compared using the equals() method.

So, this is it.

I hope it is useful.

Thank You!!!

. . . . . . . . . . . . . . . . .