一些疑惑,求解释~

Wallace_YyBm 2011-06-23 11:09:04
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呢
...全文
57 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
皮特张 2011-06-23
  • 打赏
  • 举报
回复
顶楼上这个戴墨镜的大哥。
ArayChou 2011-06-23
  • 打赏
  • 举报
回复


如图,图中只是示意图,并不完全正确,途中的一个方框不是表示一个字节内存,表示4个字节内存(一个int的长度)
ArayChou 2011-06-23
  • 打赏
  • 举报
回复
不要纠结,传值还是传引用,这个只会让人更迷茫,等待呢个我去画个图来
ArayChou 2011-06-23
  • 打赏
  • 举报
回复
public static void demo(int b) {
b = 3;
//这里的b和main()里的b,不是同一个变量
//基本变量分配在栈里,它们2个占用不通的栈空间
//修改demo()的b变量,不会改变main()的b变量
}
public static void demo2(ArrayList al) {
al.add(100);
//这里的al和main()里的al,也不是同一个变量
//它们的引用存放在栈里,它们的引用也占用不通的栈空间
//但是,他们指向堆里的同一块内地址,他们引用了同一个对象
//调用方法是调用的同一个对象的方法,操作到了同一快堆内存空间
}
Wallace_YyBm 2011-06-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 dong_very_good 的回复:]
因为第一个是值传递,第二个是引用传递。
[/Quote]
这个我当然知道,为什么会这样呢?java到底是按什么传递的!?
dong_very_good 2011-06-23
  • 打赏
  • 举报
回复
因为第一个是值传递,第二个是引用传递。
swing_false 2011-06-23
  • 打赏
  • 举报
回复
这是java内存中栈与堆的应用,也就是值传递。第一个采用的是值传递,换句话说他只改变了形参的值,函数调用结束后形参释放,b的值还是没变
第二个是有什么问题么? 不过是list的用法,list这个接口里面定义了一个size()函数和size的成员变量,
一旦添加或者删除都会对size进行更新,也就是说size()获得的是list的当前容量

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧