2015-07-02 3 views
2

В C, если я вычту string из того же string, это приведет к NULL. Итак, если str1 = str2, str1 = str2 - str1 = NULL. Как достичь той же нулевой операции/результата в Java?Вычитание 2 строки в Java равно нулю

спасибо.

+1

Вы не можете математически вычитать строки. Java ** IS NOT ** C. Пожалуйста, объясните, что вы пытаетесь сделать, и правильный код для репликации проблемы. –

+1

Вы не можете; для одного вы не можете вычитать строки. – fge

ответ

0

В java нет способа сделать это, потому что вы не можете использовать оператор «-» для объектов. Только если ваша цель ставится нуль, когда оба объекта равны, вы можете достичь нулевой результат следующим образом:

String str1 = "hola"; 
    String str2 = "hola"; 
    String str3 = ""; 

    if(str1.equals(str2)){ 
     str3 = null; 
    } 
5

Вы не можете вычесть строки в C или Java.

В C, вы можете вычесть два адреса строк. Если это тот же адрес, вы получите нуль. Если они не совпадают с адресом, вы получите осмысленный результат, только если они находятся в одном блоке выделенной памяти.

Вы можете получить ненулевой результат из вычитания адресов двух равных строк, хранящихся в разных ячейках памяти. Вы можете проверить равенство строки C с помощью strcmp или strncmp(). (Предпочтение следует отдавать последним.)

В Java если вы хотите, чтобы определить, если две строки являются же объект, вы можете использовать оператор равенства. Например, str1 == str2 вернет true, если два являются одним и тем же объектом.

Если вы хотите определить, являются ли две строки равными, вы можете использовать метод equals(). Например, str1.equals(str2) вернет true, если две строки равны. Если любой из них может быть нулевым, вы можете использовать вместо него Objects.equals(str1, str2).

0

Собственно, нет. Вычитание одних и тех же указателей не обязательно должно приводить к NULL. То, что это наверняка будет, равно нулю, типа ptrdiff_t. NULL, являющееся нолем, является предположением, которое не гарантируется.

Но это вообще не работает в Java, поскольку в нем нет указателей (а не примитивных типов) и, впоследствии, арифметики указателей; строки известны по их ссылкам. Вы не можете делать слишком много ссылок на Java, кроме разыменования их (и ссылка гарантирована, если она не будет null), присваивая и сравнивая их для равенства. Это все, что вам нужно.

0

В C строковые переменные являются указателями, которые являются числовыми, и вы можете выполнять их вычитание.

В Java ваши строковые переменные являются ссылками на String Объекты и попытка вычитания - это ошибка типа. В частности - ограничивается использованием конкретных примитивных числовых типов: байт, короткие, INT, долго, поплавок и двойной.

Чтобы определить, есть ли две строки переменные ссылаются на тот же объект в памяти вы будете использовать str1 == str2 (двойной Равен), который определяет равенство ссылок. Чтобы определить, имеют ли две переменные одинаковое значение (но могут быть разные ссылки), вы должны использовать str1.equals (str2) при условии, что str1! = Null.

Смежные вопросы