String comparison in Java Weird [duplicate] - java

This question already has answers here:
How do I compare strings in Java?
(23 answers)
Closed 8 years ago.
Hi I have a strange problem with my code and I cant figure out whats wrong.
I have:
ArrayList called players
Class: Player
Class: Name
Player class contains Name class which contains 3 Strings FirstName MiddleName LastName
The problem is when im trying to do
For( int i = 0; i < players.size(); i++)
{
if( players.get(i).getName().getFirst() == "First1")
{
// Some Code
}
System.out.printf(players.get(i).getName().getFirst());
}
If statement is never true, weird thing is when im using system.out to check as below
System.out.printf(players.get(i).getName().getFirst());
it returns:
First1 First2 First3
getName() method returns object name and getFirst() returns String FirstName
Any ideas where the problem is?

Never EVER EVER EVER compare Strings with ==. use .equals() instead.
"==" compares references of Strings. .equals() compares actual values.

To compare String objects in java use .equals() method instead of "==" operator. If you want ignore the case use .equalsIgnoreCase() method.
For String comparison you should use like this
if( "First1".equals(players.get(i).getName().getFirst()))

Related

If Else Statement Not Returning Right Value [duplicate]

This question already has answers here:
How do I compare strings in Java?
(23 answers)
Closed 4 years ago.
I am trying to check if a playlist is simple or master by an index value. My problem is when I put the (True) URL it still returns a false statement "This is a simple Playlist".
Any tips on how I can fix this ?
String output = getPlaylistUrl(input);
String mediaRecord = output.substring(399);
String lastRecord = "gear4/prog_index.m3u8";
if (mediaRecord == lastRecord) {
System.out.println("This is a master playlist");
} else {
System.out.println("This is a simple playlist");
}
In Java, strings can not be compared for equality using ==, because == compares two instances, not the content. So unless s1 and s2 are actually the same instance, s1 == s2 will never return true.
You need to use equals(...) to compare two strings for equality.
if (mediaRecord.equals(lastRecord) { ... }
In order to compare Strings you need to use .equals and not ==. Using == compares references and not values

can´t compare String values correctly [duplicate]

This question already has answers here:
How do I compare strings in Java?
(23 answers)
Closed 8 years ago.
I´m having trouble with the while statement. I´ve narrowed it down to my use of the "!=", because if I try it with "==", then the program works, except opposite to how I want it to. What do I use to make it so that if the user types in "v", then it won´t display the user´s input, since there´s no such thing as "!==" :)
Scanner scannerUi = new Scanner(System.in);
String userInput = scannerUi.nextLine();
while (userInput != "v") {
System.out.println(userInput);
userInput = scannerUi.nextLine();
}
use
while (!userInput.equals("v")) {
System.out.println(userInput);
userInput = scannerUi.nextLine();
}
I think that u need to compare string not on reference equality as u do it but on value equality.
So, if u want to compare your current string with some other (such as "v") just use:
userInput.equals("some_string")
Using "==" u will compare strings on reference equality, and using "equals()" u will compare strings on value equality
you should always use equals() method for compairing the strings, because equals method examine the content and == method examine the references.

Storing actual input value into an array for comparison to another array [duplicate]

This question already has answers here:
How do I compare strings in Java?
(23 answers)
Closed 9 years ago.
I am still new to Java. I am trying to create a program where users must answer a multiple choice quiz. The users will input their answer and these inputs will be formed into an array. Then I plan on using a for loop to compare the user's answers array to the array of correct answers to tell the user if they are right or wrong.
However it seems that i am not properly comparing the 2 arrays in my if statement. Every time I run the program, it goes straight to the else statements.
My hunch is that the scanner class does not actually store the value?
Can anyone help?
Part of code below:
//Above this section is just a collection of "System.out.println" statements that state questions and answers the user choose from.
int x;
String answers [] = {"a", "a", "b"};
//answers array has the correct answer
Scanner in = new Scanner(System.in);
String answerEntered [] = new String [5];
//user input will be in this arra
for(x=0 ; x<3 ; x++)
{
System.out.print((1+x)+". ");
answerEntered[x] = in.nextLine();
}
for( x=0; x<3; x++)
{
**if(answerEntered[x] == answers[x])
{
System.out.println("For Question "+(x+1)+", you are Correct!");
}**
//This if section does not seem to work. Every time i run the code it automatically goes to the else statement.
else
{
System.out.println("The correct answer for Question "+(x+1)+" is: "+answers[x]);
}
}
In Java, String aren't primitive values, you have to use String.equals() to compare strings
so, change this:
if(answerEntered[x] == answers[x])
to
if(answerEntered[x].equals(answers[x]))
I would also suggest that you check for nullability and ignore case, so:
String answer = answerEntered[x];
boolean isAnswerCorrect =
answer != null &&
//remove trailling spaces and ignore case (a==A)
answer.trim().equalsIgnoreCase(answers[x]);
if(isAnswerCorrect){
For String or any object-equality test in Java, you should almost always be using equals. The == operator only compares references when used with objects (but will work the way you expect it to with primitives like int, boolean, etc); that is, it checks to see if the operands both point/refer to the same object instance. What you're interested in doing is comparing the contents of the String instance, and equals will do that for you:
if(answerEntered[x].equals(answers[x])) {
...
}
For String comparison, you need to use equals instead of ==, which for non-primitive data types, such as String, compares their references, not values.
String a = "foo";
String b = "bar";
if (a.equals(b))
{
//doSomething
}
The problem is in the comparison :
String a = "foo";
String b = "bar";
if (a.equals(b))
//doSomething
AS it Has been answered before.
Extra information, in the for loop of the if / else you are looping only the first 3 positions, not the 5 that exists in the answerEntered array.
Cheers
Use .equals to compare strings. equals compares the values, where == compares the reference
.
In Java, == comparison compares reference identity, means the two things you compare must be the same object. Two objects with the same values are treated as different.
You statement:
if(answerEntered[x] == answers[x])
The answerEntered contains string that is different with any string in answer even if they have the same value.
Java uses Object's .equals method to compare by value, i.e. Two objects are equal as long as they have the same value.
Changing:
if(answerEntered[x] == answers[x])
to
if(answerEntered[x].equals(answers[x]))
should solve the problem.
Also, as answerEntered contains user inputed value, you'd better pre-process it before using it. For example, user might put answer "a " with spaces at the end. You might want to get rid of those spaces as well.
Otherwise "a " will be treated as an incorrect answer.

Java if statement comparison of 2 values [duplicate]

This question already has answers here:
How do I compare strings in Java?
(23 answers)
String.equals versus == [duplicate]
(20 answers)
Closed 9 years ago.
I'm having a slight problem that i can't understand, i'm building a Web Server that handles calls in the java E.G go to use /SendCommand.html then Java will handle the request, i have a login system built using post, but for some reason my login check is not working,
private boolean checkLogin(String user, String pass){
for(int i = 0; i < users.users.length; i++ ){
String test = SHA1.toSHA1(pass);
if(users.users[i][0] == user && users.users[i][1] == test ){
return true;
}
}
return false;
}
I'm Breaking at the if statment to provide the information below When i debug this i get,
Name | Type | Value
users Users #163
users String[] #165(length=1)
[0] String[] #167
[0] String "Admin"
[1] String "d033e22ae348aeb5660fc2140aec35850c4da997"
user String "Admin"
pass String "admin"
test String "d033e22ae348aeb5660fc2140aec35850c4da997"
As you can see users.users[0][0] == user and users.users[0][1] == test why is it returning false from the method?
Don't use == to compare strings. Use s1.equals(s2) instead. The former compares references, which is almost always not what you want. The latter, on the other hand, compares character sequences.
Use .equals() to compare strings, not ==.
if(users.users[i][0].equals(user) && users.users[i][1].equals(test))
Always compare String with .equals()

Identical strings comparison gives me false [duplicate]

This question already has answers here:
How do I compare strings in Java?
(23 answers)
Closed 6 years ago.
I have two identical strings, one in an array and one in a String variable. When I compare these IDENTICAL strings I get false every time. I have debugged and debugged, but I get the same result every time. Here is the code in question
String temp = ""+(num1*num2);
Boolean equal = temp == answers[i];
if(equal) {
correct[i] = true;
num_correct ++;
}else{
correct[i] = false;
}
Again, I have debugged every minor detail of this program and I am 101% sure that the strings are IDENTICAL. Why is Java returning false on comparison?
When you use the == operator in Java with objects, you are attempting to compare object references. That is, is this object handle pointing to the EXACT same object as this other object handle. Unless the strings are interned, this will not work.
Use String.equals(Object) instead:
Boolean equal = temp.equals(answers[i]);
You are doing reference comparison, not value comparison. When you use the == operator its checking to see if the references are equal, and they aren't. If you want to check whether the values are equal use the equals method.
boolean equal = temp.equals(answers[i]);
== in java for strings is comparing to see if they are the same object, not the same string value. You should use .equals instead which will compare the value. == works sometimes because the strings can be interned and refer to the same object via reference even if created seperately through the same literal (so string b = "Hey" and string c = "Hey" end up being the same object in the background because "Hey" got interned to a hidden string object).
As others have shown you should use equals.
But I would also use the booleanValue of the Boolean object.
Here is your code correctly done
String temp = ""+(num1*num2);
Boolean equal = temp.equals(answers[i]);
if(equal.booleanValue()) {
correct[i] = true;
num_correct ++;
}else{
correct[i] = false;
}
Does this help?
Boolean equal = (temp == answers[i]);
I'm not sure that would be an issue, but I always enclose my conditions in parenthesis.

Categories

Resources