35

我对Java相当陌生,我正在使用BlueJ。我在尝试编译时不断收到这个“Int cannot be dereferenced”错误,我不确定问题是什么。该错误特别发生在我底部的 if 语句中,它说“等于”是一个错误,“int 不能被取消引用”。希望得到一些帮助,因为我不知道该怎么做。先感谢您!

public class Catalog {
    private Item[] list;
    private int size;

    // Construct an empty catalog with the specified capacity.
    public Catalog(int max) {
        list = new Item[max];
        size = 0;
    }

    // Insert a new item into the catalog.
    // Throw a CatalogFull exception if the catalog is full.
    public void insert(Item obj) throws CatalogFull {
        if (list.length == size) {
            throw new CatalogFull();
        }
        list[size] = obj;
        ++size;
    }

    // Search the catalog for the item whose item number
    // is the parameter id.  Return the matching object 
    // if the search succeeds.  Throw an ItemNotFound
    // exception if the search fails.
    public Item find(int id) throws ItemNotFound {
        for (int pos = 0; pos < size; ++pos){
            if (id.equals(list[pos].getItemNumber())){ //Getting error on "equals"
                return list[pos];
            }
            else {
                throw new ItemNotFound();
            }
        }
    }
}
4

7 回答 7

29

id是原始类型int而不是Object. 您不能像在此处那样调用原语上的方法:

id.equals

尝试替换这个:

        if (id.equals(list[pos].getItemNumber())){ //Getting error on "equals"

        if (id == list[pos].getItemNumber()){ //Getting error on "equals"
于 2013-10-01T06:10:45.213 回答
6

基本上,你试图使用int它,就好像它是一个Object,它不是(嗯......它很复杂)

id.equals(list[pos].getItemNumber())

应该...

id == list[pos].getItemNumber()
于 2013-10-01T06:10:59.913 回答
0

假设getItemNumber()返回一个int,替换

if (id.equals(list[pos].getItemNumber()))

if (id == list[pos].getItemNumber())

于 2013-10-01T06:10:47.927 回答
0

改变

id.equals(list[pos].getItemNumber())

id == list[pos].getItemNumber()

int有关更多详细信息,您应该了解原始类型(如、char和 )double与引用类型之间的区别。

于 2013-10-01T06:11:02.230 回答
0

由于您的方法是 int 数据类型,您应该使用“==”而不是 equals()

尝试替换这个 if (id.equals(list[pos].getItemNumber()))

if (id.equals==list[pos].getItemNumber())

它将修复错误。

于 2018-06-23T14:59:27.917 回答
0

取消引用是访问引用所引用的值的过程。因为 int 已经是一个值(不是引用),所以它不能被取消引用。所以你需要将你的代码(。)替换为(==)。

于 2022-02-21T05:20:34.707 回答
-1

尝试

id == list[pos].getItemNumber()

代替

id.equals(list[pos].getItemNumber()
于 2013-10-01T06:12:46.903 回答