无法在整数数组中找到元素

q3qa4bjr  于 2021-08-25  发布在  Java
关注(0)|答案(3)|浏览(436)

在这段代码中,我能够找到并计算任何小于10的元素。但是当要找到大于10的元素时,计数器总是显示0,即使搜索的元素存在于数组中。我使用了通用接口和静态方法。。。字数计数工作正常,但问题是大于10的数字总是显示0。以下是代码:

interface FuncCounter<T>{
    int function(T[] t, T tt);
}
class Implementation{
    static<T> int equalValues(T[] t , T tt) {
        int counter = 0;
        for(int i = 0 ; i< t.length; i++) {
            if(t[i]==tt)
                counter++;
        }
        return counter;
    }
}

public class GenericMethodRef{
    static<T> int countOperation(funcCounter<T> fc , T[] t , T v) {
        return (int) fc.function(t, v);

    }
    public static void main(String []args) {
        Integer[] nums = {1,1,2,3,4,4,5,6122,23,4,12,44,12,12,12,44,5,6,32, 318,318,318};
        String[] words = {"one","two","three","four","four","twelve","eleven", "eleven"};
        int countNum = countOperation(Implementation::<Integer>equalValues,nums,6122);
        int countWords = countOperation(Implementation::<String>equalValues,words,"eleven");
        System.out.println("318 presence: " + countNum);
        System.out.println("'eleven' counted: " + countWords);

    }```
uurity8g

uurity8g1#

这是因为您对整数使用自动装箱,这会导致 int 进入 Integer ,作为参考,它将无法与 == 操作人员
相反,使用 .equals() 方法,或者更好的方法是 Objects.equals(t[i], tt) 呼叫
要添加,通常(在大多数JVM中)存储/散列-10到10之间的整数、长整数、甚至字符串等,以指向相同的对象( == 工作)。因此,这就是为什么它错误地适用于低数字,但在高数字上失败的原因。

pexxcrt2

pexxcrt22#

记住这三条规则 == on基元数据类型将比较实际值 == on reference data type将比较两个对象是否共享相同的内存 equals() 预定义类的方法将比较引用数据类型的实际值。它可以为我们自己的类重写。

mkh04yzy

mkh04yzy3#

即使您的方法被称为equalvalues,您也没有使用equals()方法,这就是问题所在:您传递一个整数数组,它的 Package 类。值小于实现定义的限制的对象被缓存,因此它适用于较小的数字。较大的值不会保存在缓存中,因此identity运算符==返回false。
您可以使用objects.equals(t[i],tt)来修复代码。
请阅读java文档中==和equals之间的差异以了解更多详细信息。

相关问题