В C, если я вычту string
из того же string
, это приведет к NULL
. Итак, если str1 = str2
, str1 = str2 - str1 = NULL
. Как достичь той же нулевой операции/результата в Java?Вычитание 2 строки в Java равно нулю
спасибо.
В C, если я вычту string
из того же string
, это приведет к NULL
. Итак, если str1 = str2
, str1 = str2 - str1 = NULL
. Как достичь той же нулевой операции/результата в Java?Вычитание 2 строки в Java равно нулю
спасибо.
В java нет способа сделать это, потому что вы не можете использовать оператор «-» для объектов. Только если ваша цель ставится нуль, когда оба объекта равны, вы можете достичь нулевой результат следующим образом:
String str1 = "hola";
String str2 = "hola";
String str3 = "";
if(str1.equals(str2)){
str3 = null;
}
Вы не можете вычесть строки в C или Java.
В C, вы можете вычесть два адреса строк. Если это тот же адрес, вы получите нуль. Если они не совпадают с адресом, вы получите осмысленный результат, только если они находятся в одном блоке выделенной памяти.
Вы можете получить ненулевой результат из вычитания адресов двух равных строк, хранящихся в разных ячейках памяти. Вы можете проверить равенство строки C с помощью strcmp
или strncmp()
. (Предпочтение следует отдавать последним.)
В Java если вы хотите, чтобы определить, если две строки являются же объект, вы можете использовать оператор равенства. Например, str1 == str2
вернет true, если два являются одним и тем же объектом.
Если вы хотите определить, являются ли две строки равными, вы можете использовать метод equals()
. Например, str1.equals(str2)
вернет true, если две строки равны. Если любой из них может быть нулевым, вы можете использовать вместо него Objects.equals(str1, str2)
.
Собственно, нет. Вычитание одних и тех же указателей не обязательно должно приводить к NULL
. То, что это наверняка будет, равно нулю, типа ptrdiff_t
. NULL
, являющееся нолем, является предположением, которое не гарантируется.
Но это вообще не работает в Java, поскольку в нем нет указателей (а не примитивных типов) и, впоследствии, арифметики указателей; строки известны по их ссылкам. Вы не можете делать слишком много ссылок на Java, кроме разыменования их (и ссылка гарантирована, если она не будет null
), присваивая и сравнивая их для равенства. Это все, что вам нужно.
В C строковые переменные являются указателями, которые являются числовыми, и вы можете выполнять их вычитание.
В Java ваши строковые переменные являются ссылками на String Объекты и попытка вычитания - это ошибка типа. В частности - ограничивается использованием конкретных примитивных числовых типов: байт, короткие, INT, долго, поплавок и двойной.
Чтобы определить, есть ли две строки переменные ссылаются на тот же объект в памяти вы будете использовать str1 == str2 (двойной Равен), который определяет равенство ссылок. Чтобы определить, имеют ли две переменные одинаковое значение (но могут быть разные ссылки), вы должны использовать str1.equals (str2) при условии, что str1! = Null.
Вы не можете математически вычитать строки. Java ** IS NOT ** C. Пожалуйста, объясните, что вы пытаетесь сделать, и правильный код для репликации проблемы. –
Вы не можете; для одного вы не можете вычитать строки. – fge