0
import java.util.*;

import java.io.*;

public class Test extends ArrayList
{

    ArrayList<String> list = new ArrayList<String>();

    public static void main(String[] args)
    {
        new Test().add();
        new Test().contains();
    }



    public boolean add(){
        list.add("cat");
        System.out.println(list);
        return true;
    }

    public void contains(){
        if (list.contains("cat")){
            System.out.println("list contains cat");
        }
        else{
            System.out.println("list doesn't contain cat");
        }

    }

}

为什么结果 [cat] 列表不包含 cat?它一直给我 [cat] 列表不包含猫。第一种方法可以正常工作,但为什么第二种方法不行?谢谢...我对此真的很陌生。

4

5 回答 5

7

那是因为您使用不同的实例调用这两种方法。

new Test().add(); // Creates 1 instance
new Test().contains(); // creates another instance

您需要使用相同的实例来调用这两种方法。

Test t = new Test();
t.add();
t.contains();

由 创建的每个新Test对象new Test()都有自己的list. 这就是为什么当您contains()使用另一个实例调用时,它仍然为空,因为list第一个实例的 仅添加了字符串“cat”。

于 2013-11-15T08:10:43.370 回答
1

因为 arraylist 不是静态的,所以您正在创建两个 App 实例,每个实例都有自己的列表变量。

将变量设置为静态,它将起作用。

static ArrayList<String> list = new ArrayList<String>();

但是最好使用同一个实例调用两次。

Test test = new Test();
test.add();
test.contains();
于 2013-11-15T08:11:14.687 回答
1

你打new Test()了两次电话。您正在创建两个实例。您要添加到第一个,并检查contains第二个(新创建的)。

于 2013-11-15T08:11:16.457 回答
0

您正在创建两个 Test 实例。然后创建两个单独的“列表”实例。首先是字符串“cat”,第二个是空的。

于 2013-11-15T08:13:13.630 回答
0

为什么要扩展 ArrayList?也许你可以试试这样......

import java.util.ArrayList;

public class Test {

    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<String>();
        list.add("cat");
        System.out.println(list);

        if (list.contains("cat")) {
            System.out.println("list contains cat");
        } else {
            System.out.println("list doesn't contain cat");
        }     

    }  
}
于 2013-11-15T08:24:19.853 回答