Bonz0
Bonz0

Reputation: 373

Comparision between character and string not working like I expect it to. What am I doing wrong?

I'm trying to compare a string and a character (after converting it to a string). The code is not working like I expect it to work.

package main;
import java.lang.Character;

public class Main {
    public static void main(String[] args) {
        char myChar = 'a';
        String myString = "a";
        if(myString == Character.toString(myChar)) {
            System.out.println("This SHOULD work! But it doesn't.");
        } else {
            System.out.println("This SHOULDN'T work! But it does.");
        }
    }
}

What am I doing wrong here?

Upvotes: 0

Views: 147

Answers (4)

GETah
GETah

Reputation: 21419

General rule for string comparison:

  • == compares references (some sort of pointers if you are coming from C)
  • equals compares the content.

In your case, you are comparing two different references to two different objects and that's why it is returning false where you expect it to be true. For string comparison, always use the String.equals() method

Upvotes: 0

Dr. Rajesh Rolen
Dr. Rajesh Rolen

Reputation: 14285

For comparing equality of string ,We Use equals() Method. There are two ways of comparison in java. One is "==" operator and another "equals()" method . "==" compares the reference value of string object whereas equals() method is present in the java.lang.Object class. This method compares content of the string object. .

So in your case, its better to use .equals() instead if "==".

Upvotes: 1

user784540
user784540

Reputation:

Do not use == operator to compare strings. While string literals embedded to source code can be compared with this operator, this approach does not work for string objects, you get dynamically.

It is because == compares references to objects, not the object values.

Use String.equals() method to compare strings objects.

Upvotes: 0

Eng.Fouad
Eng.Fouad

Reputation: 117597

Use:

if(myString.equals(Character.toString(myChar)))

instead of:

if(myString == Character.toString(myChar))

== tests whether the two references pointing to the same object in the memory or not, while equals method checks if the two references pointing to the same object OR they have the same contents.

Upvotes: 5

Related Questions