Вопрос по string, java, equals, null – Java пустая строка равна результату

7

Пожалуйста, помогите мне, как string.equals в Java работает с нулевым значением? Есть ли проблемы с исключениями? Три случая:

boolean result1,result2, result3;

    //1st case
    String string1 = null;
    String string2 = null;
    result = string1.equals(string2);
    //2nd case
    String string1 = "something";
    String string2 = null;
    result2 = string1.equals(string2);
    //3rd case 
    String string1 = null;
    String string2 = "something";
    result3 = string1.equals(string2);

Каковы значения результатов? Я ожидаю, что это значения:

result1 is true;
result2 is false;
result3 is false;

Вы можете попробовать ответить на свой вопрос. Op De Cirkel
Это домашнее задание ...? Chris Thompson
Почему бы тебе не попробовать? Chip
Я не уверен насчет случая № 2, но случаи 1 и 3 вызовут исключение Null, поскольку вы пытаетесь вызвать метонд нулевого объекта. Érik Desjardins
@ChrisThompson не совсем то, что происходит в этом случае, но я сравниваю множество строк в моей работе в школе, поэтому мне нужно было знать поведение этих случаев, и я не хочу что-то пропустить .. user1097772

Ваш Ответ

7   ответов
1

Вы не можете вызывать какие-либо методы (например,equals()) на нулевом объекте.

2

NullPointerException всякий раз, когда строка1 равна нулю, и вы вызываетеequals на нем, как и в случае, когда метод неявно вызывается для любого нулевого объекта.

Чтобы проверить, является ли строка нулевой, используйте== скорее, чемequals.

Хотяresult1 а такжеresult3 не будет установлен из-за исключений NullPointerExceptions, result2 будет ложным (если вы запустили его вне контекста других результатов).

2

Objects.equals() сравнивать строки или любые другие объекты, если вы используете JDK 7 или более позднюю версию. Он будет обрабатывать нули без исключения. Смотрите больше здесь:как-ду-я-сравнения-строки-в-Java

Хотя пример"a string literal".equals(someStringVariable) в принятом ответе заслуживает похвалы, это не помогает OP выяснить, как обрабатывать случай, когда обе строки равны нулю (несмотря на то, что это первый представленный регистр OP). Это лучший ответ, поскольку он обрабатывает все 3 случая без использования пользовательского кода или сторонней библиотеки.
0

так как это даст NullPointerException. Поэтому мы можем воспользоваться блоком try..catch в нашей программе. Это очень грубый способ решения вашей проблемы, но вы получите желаемый результат.

try {
   result = string1.equals(string2);
} catch (NullPointerException ex) {
   result = string2 == null; //This code will be executed only when string 1 is null
}
1

если хотя бы одна из них может иметь значение null, используйте метод StringUtils.equals, который является нулевым.

11

null переменная для вызова нестатического метода.

Несмотря на это, все зависит от переопределенияequals() методObject учебный класс. В случае сString класс, это:

public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        String anotherString = (String)anObject;
        int n = count;
        if (n == anotherString.count) {
            char v1[] = value;
            char v2[] = anotherString.value;
            int i = offset;
            int j = anotherString.offset;
            while (n-- != 0) {
                if (v1[i++] != v2[j++])
                    return false;
            }
            return true;
        }
    }
    return false;
}

Если вы пройдетеnull в качестве параметра, оба "если" потерпит неудачу, вернувшисьfalse;

Альтернативой для вашего случая является создание метода для ваших требований:

public static boolean myEquals(String s1, String s2){
    if(s1 == null)
        return s2 == null;
    return s1.equals(s2);
}
31

«.») Для доступа к переменным экземпляра или вызова методов в экземпляре, если этот экземплярnull, Это дастNullPointerException.

Обычной практикой является использование чего-то, что вы знаете, чтобы быть ненулевым, для сравнения строк. Например,"something".equals(stringThatMayBeNull).

Не совсем верно. Вы можете вызвать статический метод для пустой ссылки.
Хорошо, вот что мне нужно было знать, спасибо. Я буду использовать пустые строки & quot; вместо пустой строки :-) user1097772
@ user1097772 Пустые строки не равны нулю.
это круто, я не знал, что
@Vulcan Да, я знаю это. Я имею в виду, что я буду использовать не пустые строки, а пустые строки. Значения string1 и string2 в моем примере являются результатами моего парсера ... Я гарантирую, что строки не равны NULL, и у меня не возникнет проблем. Пустые значения будут представлены пустой строкой вместо пустой строки. user1097772

Похожие вопросы