标题问题有点棘手,所以这是我的问题:
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()虽然它不起作用所以这就是为什么我在这里。感谢
答案 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
是在该方法中可见的实例或类变量,否则该方法不知道y
。 list
是此处的局部变量,用于传递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);
}
}