Java - ArrayList并创建一个对象

时间:2013-05-06 17:30:48

标签: java arraylist

标题问题有点棘手,所以这是我的问题:

1-我创建了一个arraylist的对象y并将其指定为引用变量,到目前为止一直很好。

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

2-这里我向数组中添加了一个元素:

y.add("Hello"); y.add("GoodBye");

现在这是我不理解的部分,现在当我创建一个返回String的方法时:

public String stringful(ArrayList<String> list)

现在当我尝试获取数组的size()时,我使用list.size()但为什么呢?是不是原始对象,我应该使用y.size()虽然它不起作用所以这就是为什么我在这里。感谢

4 个答案:

答案 0 :(得分:4)

使用此方法标题:

public String stringful(ArrayList<String> list)

您声明此方法将使用名为ArrayList<String>的{​​{1}}类型的对象。因为您在本地声明list,所以另一种方法甚至不知道存在。从该方法引用y将不会编译,当然假设它是一个局部变量。

Java中的指针

创建新对象时,使用指向该对象的指针。例如,当您声明:

y

你正在创建一个指针。添加代码时:

ArrayList<String> y;

这会将指向新ArrayList<String> y = new ArrayList<String>(); 对象的指针放入ArrayList<String>变量中。因此,当您将y作为参数传递给方法时,您将向y指向的对象传递指针,而不是对象自身。这就是您的代码与y一起使用的原因。它所做的就是获取完全相同的对象的list.size()值,只需使用不同的指针。

摘要

在摘要中,它实际上相同的对象。它只是不同的指针,看着那个对象。

答案 1 :(得分:3)

您正在将对ArrayList<String> y方法stringful的引用传递给list引用变量,因此将使用list.size()。除非y是在该方法中可见的实例或类变量,否则该方法不知道ylist是此处的局部变量,用于传递y的引用。这样,您可以将任何ArrayList<String>的引用传递给该方法并计算其长度。如果您在该方法中使用了y.size()(在该方法中提供了y),那么您只能计算ArrayList<String>引用的y的长度

答案 2 :(得分:2)

y本地变量 它只存在于您声明它的函数内 y指的是ArrayList个实例。

当您撰写stringful(y)时,您将此ArrayList实例作为参数传递给该功能。
在函数中,您可以使用list“变量”(它实际上是一个参数,但它看起来像一个变量)来引用参数的值,它指的是您调用它时传递的相同实例。

答案 3 :(得分:0)

看看this tutorial。它通过范围界定,似乎相当清楚。 举个简单的例子:

public class Test{
    private List<String> globalY;//accessable to anything in the class

    public Test(){
        globalY=new ArrayList<String>();
        globalY.add("global");   
    }

    //here, methodParam is only accessible inside this method
    public void example(ArrayList<String> method){
        //this list is only available inside this method
        List<String> local=new ArrayList<String>();
        local.add("local");

        System.out.println(globalY(0));
        System.out.println(method(0));
        System.out.println(local.get(0));
    }

    public static void main(String[] args){
        Test test=new Test();
        List<String> localY=new ArrayList<String>();
        localY.add("method");

        test.example(localY);
    }
}