Wrong results while String comparison
To compare two strings u should use the method equals() or equalsIgnoreCase().
in your case:
if(it.next().equals(args[0]))
the operator == returns true if the two object are the same object, same address in memory.
Identical strings comparison gives me false
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]);
Comparing two Strings using .equals() returns False, but their byte arrays are equal
Unequal strings do not have to produce different arrays when you do getBytes()
.
The result depends on the platform's default charset, but when I run the following code
String str1 = "?";
byte[] arr1 = str1.getBytes();
String str2 = "\u0080";
byte[] arr2 = str2.getBytes();
System.out.println(str1.equals(str2));
System.out.println(Arrays.equals(arr1, arr2));
the output I see is
false
true
I don't know exactly what is going on here, but it looks like certain control characters get treated as '?'
.
The correct way to understand why strings are different is to compare the character arrays returned by toCharArray()
.
Android string compare is false
Use equals()
to compare strings for content, not ==
.
==
will check if the objects are the same.
String foo = "foo";
if (foo == foo) {
// same object, so true
}
String foo1 = "foo";
String foo2 = "foo";
if (foo1 == foo2) {
// both are string literals set at compile time, so true
}
String foo1 = loadFoo1(); // imagine this returns "foo"
String foo2 = loadFoo2(); // imagine this also returns "foo"
if (foo1 == foo2) {
// not the same object, and not string literals, so false
}
if (foo1.equals(foo2)) {
// both strings hold "foo", so true
}
Comparison of two String return always false java
First of all, you should check if the values you are getting in those variables are correct, and the desired.
If they are correct, then, to delete the quotes you can use the String#replace
method to replace all the double quotes with an empty:
var1.replace("\"", "");
Note that here you should escape the double quote \"
.
Note: This answer supposes that you are comparing the Strings correctly (using String#equals
).
How do I compare strings in Java?
==
tests for reference equality (whether they are the same object).
.equals()
tests for value equality (whether they are logically "equal").
Objects.equals() checks for null
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
// ... string literals are concatenated by the compiler
// and the results are interned.
"test" == "te" + "st" // --> true
// ... but you should really just call Objects.equals()
Objects.equals("test", new String("test")) // --> true
Objects.equals(null, "test") // --> false
Objects.equals(null, null) // --> true
You almost always want to use Objects.equals()
. In the rare situation where you know you're dealing with interned strings, you can use ==
.
From JLS 3.10.5. String Literals:
Moreover, a string literal always refers to the same instance of class
String
. This is because string literals - or, more generally, strings that are the values of constant expressions (§15.28) - are "interned" so as to share unique instances, using the methodString.intern
.
Similar examples can also be found in JLS 3.10.5-1.
Other Methods To Consider
String.equalsIgnoreCase() value equality that ignores case. Beware, however, that this method can have unexpected results in various locale-related cases, see this question.
String.contentEquals() compares the content of the String
with the content of any CharSequence
(available since Java 1.5). Saves you from having to turn your StringBuffer, etc into a String before doing the equality comparison, but leaves the null checking to you.
Related Topics
What's the Difference Between Fx:Id and Id: in Javafx
Implementing Singleton with an Enum (In Java)
How to Know If Other Threads Have Finished
Java Client Certificates Over Https/Ssl
Places Where Javabeans Are Used
Java Integer Compareto() - Why Use Comparison VS. Subtraction
Java.Lang.Runtimeexception: Uncompilable Source Code - What Can Cause This
Using Prepared Statements to Set Table Name
Java Class That Implements Map and Keeps Insertion Order
How to Use Java Property Files
How to See Jit-Compiled Code in Jvm
How to Ensure Order of Processing in Java8 Streams
What Is Suppresswarnings ("Unchecked") in Java
How to Merge Two Sorted Arrays into a Sorted Array
Why Does the Tostring Method in Java Not Seem to Work for an Array