public class demo {
public static void demo(int b) {
b = 3;
}
public static void demo2(ArrayList al) {
al.add(100);
}
public static void main(String[] args) {
int b = 1;
demo(b);
System.out.println(b);
ArrayList al = new ArrayList();
al.add(1);
al.add(2);
al.add(3);
demo2(al);
System.out.println(al.size());
}
}纳闷了,为什么同样是没有返回值的方法,为什么第一个b的结果是原来的1,而第二个al的结果却是改变后的值4呢
public static void demo(int b) {
b = 3;
}
public static void demo2(ArrayList al) {
al.add(100);
}
public static void main(String[] args) {
int b = 1;
demo(b);
System.out.println(b);
ArrayList al = new ArrayList();
al.add(1);
al.add(2);
al.add(3);
demo2(al);
System.out.println(al.size());
}
}纳闷了,为什么同样是没有返回值的方法,为什么第一个b的结果是原来的1,而第二个al的结果却是改变后的值4呢
b = 3;
//这里的b和main()里的b,不是同一个变量
//基本变量分配在栈里,它们2个占用不通的栈空间
//修改demo()的b变量,不会改变main()的b变量
}
public static void demo2(ArrayList al) {
al.add(100);
//这里的al和main()里的al,也不是同一个变量
//它们的引用存放在栈里,它们的引用也占用不通的栈空间
//但是,他们指向堆里的同一块内地址,他们引用了同一个对象
//调用方法是调用的同一个对象的方法,操作到了同一快堆内存空间
}
第二个是有什么问题么? 不过是list的用法,list这个接口里面定义了一个size()函数和size的成员变量,
一旦添加或者删除都会对size进行更新,也就是说size()获得的是list的当前容量