java 小题目.求解释. 答案为B 谢谢各位了

分析如下Java代码,编译运行后将输出()。(选择一项)publicclassTest{publicTest(){}staticvoidprint(ArrayListal... 分析如下Java代码,编译运行后将输出( )。 (选择一项)
public class Test {
public Test() {}
static void print(ArrayList al) {
al.add(2);
al = new ArrayList();
al.add(3);
al.add(4);
}
public static void main(String[] args) {
Test test = new Test();
ArrayList al = new ArrayList();
al.add(1);
print(al);
System.out.println(al.get(1));
}
}

a) 1
b) 2
c) 3
d) 4
回复zhangxu1216:........咳咳.我已经说了答案是B,回答问题请带解释.
请问两个 数组是 同一个吗?
如果是同一个的话. 那么static void print(ArrayList al) 中al = new ArrayList();这个是等于没用的吧?
展开
 我来答
lnlvinso
2011-01-07 · TA获得超过216个赞
知道答主
回答量:36
采纳率:0%
帮助的人:0
展开全部
public class VariTest
{
public VariTest()
{
}

static void change(ArrayList<Integer> arraylist)
{
arraylist.add(2);
arraylist = new ArrayList<Integer>();
arraylist.add(3);
arraylist.add(4);
System.out.println("print方法内"+arraylist.get(1));
}

public static void main(String [ ] args)
{
ArrayList<Integer> al = new ArrayList<Integer>();
al.add(1);
change(al);
System.out.println(al);
System.out.println(al.get(1));
}
}
看结果:
print方法内4
[1, 2]
2
过程我试着解释一下,不一定说得清楚。
java中传参时形参为java基本类型时传递的就是值,形参不是基本类型传递的就是地址。上面的形参是一个ArrayList,传递的当然是地址了。
程序先执行main方法,ArrayList<Integer> al = new ArrayList<Integer>();时,会为这个数组分配一片内存,al就指向了这篇内存的首地址。
然后change(al);方法 static void change(ArrayList<Integer> arraylist)中arraylist形参就与al实参指向了同一个地址,则 arraylist.add(2);对对原来的数组也是有作用的。
arraylist = new ArrayList<Integer>();时,arraylist 就指向了另一个新的地址,而al的指向还是没变化的,这就是 arraylist.add(3);arraylist.add(4);不会影响al的原因。
注意实参和形参。
leo_shengcg
2011-01-06 · TA获得超过145个赞
知道答主
回答量:54
采纳率:0%
帮助的人:54.3万
展开全部
首先明确 引用传递,和值传递的不同,static void print(ArrayList al) 是引用传递,也就是说main中的al和print方法中刚刚传进来的是同一个引用,指向同一个list,所以,add(1),和add(2)都是操作main中的al,在print方法中al=new ArrayList() add(3) add(4) 则是操作另外一个list;在main方法中打印的是第一个list,所以结果自然是2
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
417788655
2011-01-06 · 超过20用户采纳过TA的回答
知道答主
回答量:53
采纳率:0%
帮助的人:38.5万
展开全部
由于输出的是al.get(1) 数组是从0 开始的 get(1) 相当于去的是数组里的第二个元素
第一个 是 al.add(1); 第二个 是al.add(2); 所以get(1) 是 2 get(0) 是 1
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
互联抽风
2011-01-06
知道答主
回答量:18
采纳率:0%
帮助的人:16.6万
展开全部
基本数据类型(值类型):int。。。
引用类型:string object。。。
ArrayList 是引用类型,传入方法的实际上是内存地址,当你修改后, al.add(2);
它的下标1的值是2,new一个对象后,是新开辟一个地址存放数据了,你在print方法里打印的话,下标1的值应该是4,
这是我的理解,可能有描述错误的地方,请包涵。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
nekk1
2011-01-07
知道答主
回答量:31
采纳率:0%
帮助的人:0
展开全部
答案是B.
2个数组不是同一个 因为你传过去的只是引用.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式