• support@answerspoint.com

How do I compare strings in Java?

535

I've been using the == operator in my program to compare all my strings so far. However, I ran into a bug, changed one of them into .equals() instead, and it fixed the bug.

Is == bad? When should it and should it not be used? What's the difference?

2Answer


0

== tests for reference equality (whether they are the same object).

.equals() tests for value equality (whether they are logically "equal").

Objects.equals() checks for nulls before calling .equals() so you don't have to (available as of JDK7, also available in Guava).

Consequently, if you want to test whether two strings have the same value you will probably want to use Objects.equals().

// These two have the same value
new String("test").equals("test") // --> true 

// ... but they are not the same object
new String("test") == "test" // --> false 

// ... neither are these
new String("test") == new String("test") // --> false 

// ... but these are because literals are interned by 
// the compiler and thus refer to the same object
"test" == "test" // --> true 

// checks for nulls and calls .equals()
Objects.equals("test", new String("test")) // --> true
Objects.equals(null, "test") // --> false

You almost always want to useObjects.equals(). In the rare situation where you know you're dealing with interned strings, you can use ==

  • answered 2 years ago
  • G John

0

== compares Object reference

.equals() compares String value

Sometimes == gives illusions of comparing String values, in following cases

String a="Test";
String b="Test";
if(a==b) ===> true

This is a because when you create any String literal, JVM first searches for that literal in String pool, if it matches, same reference will be given to that new String, because of this we are getting

(a==b) ===> true

                       String Pool
     b -----------------> "test" <-----------------a

== fails in following case

String a="test";
String b=new String("test");
if (a==b) ===> false

in this case for new String("test") the statement new String will be created in heap that reference will be given to b, so b will be given reference in heap not in String Pool. Now a is pointing to String in String pool while b is pointing to String in heap, because of that we are getting

if(a==b) ===> false.

                String Pool
     "test" <-------------------- a

                   Heap
     "test" <-------------------- b

While .equals() always compares value of String so it gives true in both cases

String a="Test";
String b="Test";
if(a.equals(b)) ===> true

String a="test";
String b=new String("test");
if(a.equals(b)) ===> true

So using .equals() is awalys better.

Hope this will help.

  • answered 2 years ago
  • Sandy Hook

Your Answer

    Facebook Share        
       
  • asked 3 years ago
  • viewed 535 times
  • active 3 years ago

Hot Questions