2

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

1-我创建了一个数组列表的对象 y 并将其分配为参考变量,到目前为止一切都很好。

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

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

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

现在这是我不明白的部分,现在当我创建一个返回字符串的方法时:

public String stringful(ArrayList<String> list)

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

4

4 回答 4

4

使用此方法标头:

public String stringful(ArrayList<String> list)

您声明此方法将使用类型ArrayList<String>list. 因为您y在本地声明,所以其他方法甚至都不知道存在。对该方法的引用y不会编译,当然假设它是一个局部变量。

Java中的指针

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

ArrayList<String> y;

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

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

这会将指向新ArrayList<String>对象的指针放入y变量中。因此,当您y作为参数传递给方法时,您传递的是指向对象的指针,该对象y也指向,而不是对象本身。这就是为什么您的代码适用于list.size(). 它所做的只是获取size完全相同对象的值,只是使用不同的指针。

概括

总之,它实际上同一个对象。只是不同的指针,看着那个对象。

于 2013-05-06T17:32:39.933 回答
3

您将对ArrayList<String> yto 方法的引用传递stringfullist引用变量,因此将使用list.size(). y对该方法是未知的,除非y是在该方法中可见的实例或类变量。list是这里的局部变量,用于传递 的引用y。这样,您可以将任何引用传递ArrayList<String>给该方法并计算其长度。如果您y.size()在该方法中使用过(前提y是在该方法中可见),那么您可能只能计算ArrayList<String>.y

于 2013-05-06T17:32:53.760 回答
2

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

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

于 2013-05-06T17:32:58.770 回答
0

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

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);
    }
}
于 2013-05-06T17:42:33.420 回答