string как определить - Сравнение Java с == из двух строк является ложным?





6 Answers

Если строки не интернированы, то == проверяет ссылочный идентификатор. Использование:

 "231".equals(parts[0]);

вместо.

топологию сети автоматическое

На этот вопрос уже есть ответ:

Строковые части - это строка [6]:

["231", "CA-California", "Sacramento-155328", "aleee", "Customer Service Clerk", "Alegra Keith.doc.txt"]

Но когда я сравниваю parts[0] с "231" :

"231" == parts[0]

приведенный выше результат ложный,

Я в замешательстве, так может кто-нибудь сказать мне, почему?




Следующее выводит «true»;

String s = "231";
if(s == "231")
{
    System.out.println("true");
}
else
{
    System.out.println("false");
}

Это связано с тем, что строки не изменяются, и java будет пытаться сохранить как можно больше места, поэтому он указывает на то же самое, что и в памяти.

Однако следующее выдает «false»:

String s = new String("231");
if(s == "231")
{
    System.out.println("true");
}
else
{
    System.out.println("false");
}

new заставит его сохранить строку в новой ячейке памяти.

Кстати, вы должны ВСЕГДА использовать .equals() для сравнения строк (для случаев, подобных этому)




«==» сравнивает ссылки на объекты, в вашем случае «231» - это другой объект, чем части [0].

Вы хотите использовать String.equals .

parts[0].equals("231")



Я подумал, что было бы полезно выразить ответ в тестовом примере:

public class String231Test extends TestCase {
    private String  a;
    private String  b;

    protected void setUp() throws Exception {
        a = "231";
        StringBuffer sb = new StringBuffer();
        sb.append("231");
        b = sb.toString();
    }

    public void testEquals() throws Exception {
        assertTrue(a.equals(b));
    }

    public void testIdentity() throws Exception {
        assertFalse(a == b);
    }
}



Используйте метод equals для сравнения объектов:

String[] test = {"231", "CA-California", "Sacramento-155328", "aleee",
                 "Customer Service Clerk", "Alegra Keith.doc.txt"};

System.out.println("231".equals(test[0]));

Сравнение '==' сравнивает ссылки, а не значения.




Как многие другие уже объяснили, вы пытаетесь сравнить с оператором равенства, но тогда он будет полагаться на Object.equals () вместо String.equals ().

Таким образом, вы можете выполнить задание, явно вызвав String.equals (), но вместо того, чтобы писать

parts[0].equals("blahblah")

Я бы предпочел:

"blahblah".equals(parts[0])

Так как он избегает тестирования потенциальной недействительности частей [0] (но будьте осторожны, что сама переменная части может быть нулевой ...)

Другой способ - использовать String.intern ():

if (parts[0].intern() == "blahblah") ...

Дополнительную информацию об этом см. В http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html#intern() .




Related