内存空间分配问题

一只懒得睁眼的猫
博客专家认证
2017-01-03 05:02:24

class A
{
int i = 5;
public A(int i)
{
this.i = i;
}
}
public class App1
{
public static void main(String[] args)
{

Integer aa1 = new Integer(5);
Integer bb1 = aa1; //此时引用aa1和引用bb1指向的都是同一块内存空间
bb1 = 100;
System.out.println(aa1);
System.out.println(bb1);

A aa = new A(5);
A bb = aa; //此时引用aa和引用bb指向的都是同一块内存空间
bb.i = 100;
System.out.println(aa.i);
System.out.println(bb.i);

}
}

/*
执行结果:
5 (这里为什么不是100呢?明明指向的都是aa1与bb1执行的都是同一块内存空间啊……)
100
100
100
* */
...全文
216 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ryuugu_rena 2017-01-03
  • 打赏
  • 举报
回复
其实说来说去还是参数传递的问题,java的参数传递是值传递,你只有明白这个以后才能更好地理解这个问题。
爱睡觉的阿狸 2017-01-03
  • 打赏
  • 举报
回复
bb1 = aa1,会将aa1变量的副本(也就是aa1所引用的对象的地址值)赋给bb1,此时两个变量引用同一个内存地址的对象,但是两个变量属于不同的变量,所以当bb1改变引用地址的时候(此时bb1指向不同的内存地址所存储的对象),aa1不会跟着改变。
鱿鱼ing 2017-01-03
  • 打赏
  • 举报
回复
5 (这里为什么不是100呢?明明指向的都是aa1与bb1执行的都是同一块内存空间啊……) 确实啊 都是指向5 然后 bb1 = 100;你把bb1指向了100

62,614

社区成员

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

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