在C中,如果我从同一string
中减去string
,则会产生NULL
。
因此,如果str1 = str2
,str1 = str2 - str1 = NULL
。
如何在Java中实现相同的null操作/结果?
谢谢。
答案 0 :(得分:5)
你不能用C或Java减去字符串。
在C 中,您可以减去两个地址的字符串。如果他们是同一个地址,那么您将获得零。如果它们不是同一个地址,那么只有当它们位于同一个已分配内存块中时,才能获得有意义的结果。
您可以通过减去存储在不同内存位置的两个相等字符串的地址来获得非零结果。您可以使用strcmp
或strncmp()
测试C字符串相等性。 (后者应该是首选。)
在Java中,如果要确定两个字符串是否是相同的对象,则可以使用相等运算符。例如,如果两个是同一个对象,str1 == str2
将返回true。
如果要确定两个字符串相等,可以使用equals()
方法。例如,如果两个字符串相等,str1.equals( str2 )
将返回true。如果其中一个可能为null,则可以使用Objects.equals( str1, str2 )
。
答案 1 :(得分:0)
在java中没有办法做到这一点,因为你不能在对象上使用“ - ”运算符。只有当两个对象都是等于你的目标时才能为null,你可以按如下方式获得null结果:
String str1 = "hola";
String str2 = "hola";
String str3 = "";
if(str1.equals(str2)){
str3 = null;
}
答案 2 :(得分:0)
实际上,没有。减去相同的指针不一定会导致NULL
。类型ptrdiff_t
肯定是零。 NULL
为零是一个不保证有效的假设。
但是这在Java中根本不起作用,因为它没有指针(不是基本类型),随后是指针算术;字符串以其引用而为人所知。除了取消引用它们之外,你不能对Java的引用做太多的事情(并且保证引用成功,除非它是null
),分配和比较它们是否相等。这就是你所需要的一切。
答案 3 :(得分:0)
在C中,你的字符串变量是指针,它们是数字的,你可以对它们进行减法。
在Java中,您的字符串变量是对 String 对象的引用,而尝试减法是一种类型错误。具体而言, - 仅限于在特定的原始数字类型上使用:字节,短, int ,长,浮动,加倍。
要确定两个 String 变量是否引用内存中的同一个对象,您可以使用 str1 == str2 (double-equals)来确定引用相等性。要确定两个 String 变量是否具有相同的值(但可能是不同的引用),您将使用 str1.equals(str2),假设 str1!= null 强>