在java中引用mixup

时间:2012-09-01 15:53:55

标签: java reference

class blabla extends JPanel
{
    public blabla()
    {
    //code
    }
}

class Main
{
    public static void main(String[] args)
    {
        JPanel b;
        ArrayList<blabla> c;

        blabla a = new blabla();

        b = new JPanel();
        c = new ArrayList<blabla>();

        b.add(a);
        c.add(a);

        blabla d = (blabla) b.getComponent(0);
        System.out.println(c.indexOf(d));
     }
}

ArrayList aJPanel a是否有相同的对象? 代码输出应该是什么?

2 个答案:

答案 0 :(得分:3)

此答案基于您在没有提供代码段并且排除错误时在问题中提到的内容......

  

我创建了一个组件实例,将其绘制到屏幕上,然后将其添加到ArrayList中。   我通过使用它的子(getParent()方法)引用绘制的访问它。但是,当我将此引用传递给ArrayLists indexOf()时;方法,它返回-1。   我想这意味着该组件不存在于ArrayList中。   这是应该发生的事情,还是我可能在我的程序中弄乱了什么?我没有向你提供SSCCE,我不是要求你做任何编码,只是告诉我这是否是正常的Java行为......

以下是我的回复

indexOf()的javadoc说......

  

返回此列表中第一次出现的指定元素的索引,如果此列表不包含该元素,则返回-1。更正式地,返回最低索引i,使得(o == null?get(i)== null:o.equals(get(i))),如果没有这样的索引,则返回-1。

正如您所看到的,这取决于您组件的equals()实现。检查您的实现,因为它包含从列表中检索值的关键。

答案 1 :(得分:0)

好的,这就是你修改过的问题的答案......

  

ArrayList a和JPanel是相同的对象吗?

没有。但它们包含类blabla的相同对象。

  

代码输出应该是什么?

输出

0

这是正确的,因为您在JPanel中放置了相同的组件,而ArrayList0是元素的索引。