为什么这个Java函数总是返回true?

为什么这个Java函数总是返回true?,java,function,Java,Function,因此,这段代码本质上是在运行函数时获取提供的字符串,并在dog和cat处对其进行拆分,但不实际从字符串中删除dog或cat,然后将其分配给一个数组,在数组中循环确定是否有任何项等于cat或dog,如果是,则将它们添加到各自的变量中,然后,如果猫和狗都被蛰了相同的次数,则应该返回true,否则返回false。但不管发生什么,它总是返回true。使用equals方法进行字符串比较 splitArray[i].equalsdog 虽然您要比较的对象从来都不相同,但猫和狗计数器将始终为0 最后的结果是,

因此,这段代码本质上是在运行函数时获取提供的字符串,并在dog和cat处对其进行拆分,但不实际从字符串中删除dog或cat,然后将其分配给一个数组,在数组中循环确定是否有任何项等于cat或dog,如果是,则将它们添加到各自的变量中,然后,如果猫和狗都被蛰了相同的次数,则应该返回true,否则返回false。但不管发生什么,它总是返回true。

使用equals方法进行字符串比较

splitArray[i].equalsdog

虽然您要比较的对象从来都不相同,但猫和狗计数器将始终为0


最后的结果是,两个计数器都是0,这导致返回true

我认为问题在于您使用==来比较字符串。这在Java中并不总是有效的,最好完全避免它,并使用.equals方法。如果你打印出dogCounter和catCounter的值,它们可能都是0

我对所有三个比较语句都是这样做的,但现在在If语句中,如果两个变量都相等,它会说int不能被取消引用。你可以使用==来比较dogCounter和catCounter,因为它们是int可以用来比较所有三个比较语句,但在最后一个比较两个计数器变量的语句中,它说int不能是dereferenced@StoneColdCoder您确实需要了解基本类型和对象之间的区别。字符串是对象,除非在引用相等之后,否则应该使用相等来比较它们。但是,对于基本体,不能使用equals-应该使用==。这里有更多细节

 String[] splitArray = str.split("(?<=[dog,cat])");

 int dogCounter = 0;
 int catCounter = 0;

 for(int i = 0; i < splitArray.length; i++) {

   if (splitArray[i] == "dog") {

     dogCounter += 1;
   }

   else if (splitArray[i] == "cat") {

     catCounter += 1;
   }
 }

 if (dogCounter == catCounter) {

   return true;
 }

 else {

   return false;
 }
}