Java пустая строка равна результату

Пожалуйста, помогите мне, как 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;

 Chris Thompson13 июн. 2012 г., 05:26
Это домашнее задание ...?
 Érik Desjardins13 июн. 2012 г., 05:21
Я не уверен насчет случая № 2, но случаи 1 и 3 вызовут исключение Null, поскольку вы пытаетесь вызвать метонд нулевого объекта.
 Op De Cirkel13 июн. 2012 г., 05:22
Вы можете попробовать ответить на свой вопрос.
 Chip13 июн. 2012 г., 05:21
Почему бы тебе не попробовать?
 user109777213 июн. 2012 г., 05:30
@ChrisThompson не совсем то, что происходит в этом случае, но я сравниваю множество строк в моей работе в школе, поэтому мне нужно было знать поведение этих случаев, и я не хочу что-то пропустить ..

Ответы на вопрос(7)

Решение Вопроса

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

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

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

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);
}

так как это даст 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
}

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

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

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

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

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

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

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

Ваш ответ на вопрос