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? 它一直给我[猫]列表不包含猫。 第一种方法是正常工作,但为什么不是第二种方法呢? 谢谢......我真的很陌生。
答案 0 :(得分: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”。
答案 1 :(得分:1)
因为arraylist不是静态的,所以你要创建两个App实例,其中每个实例都有自己的列表变量。
将变量设置为静态,它将起作用。
static ArrayList<String> list = new ArrayList<String>();
但最好使用相同的实例调用两次。
Test test = new Test();
test.add();
test.contains();
答案 2 :(得分:1)
您正在拨打new Test()
两次。您正在创建两个实例。您将添加到第一个,并在第二个(新创建的)上检查contains
。
答案 3 :(得分:0)
您正在创建两个Test实例。然后,您创建两个单独的“列表”实例。首先是String“cat”,第二个是空的。
答案 4 :(得分: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");
}
}
}