java对象参数传递个人总结

本文通过实例详细解析了Java中引用与对象的工作机制,包括如何理解引用的概念、内存分配方式及对象间的赋值过程,有助于深入理解Java内存模型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

网上关于 java参数传递的说法云天雾地的,许多人不严谨的说法给许多新人 造成了误解。

经过多方试验 本人就个人理解 总结如下:希望对探求真理的同学有所帮助,如果有不严谨的说辞 ,请予以留言指正,互相讨论 共同进步。

public class Bean(

    private String name;

    public void setName(String name){this.name=name;}

   public String getName(){return this.name;}

)

 

public class Test{

     public static void main(String args[]){
          Bean bean1=new Bean();

          bean1.setName("abc");

          Bean bean2=bean1;

          bean2.setName("cba");

          System.out.println(bean1.getName());

          }

}

运行结果:cba

解释:java中变量都用 引用 这个名字代替

1。在内存的 栈内存区存储引用,堆内存存储引用指向的实际内容。

2.  虚拟机在运行的时候每读到一个引用就调至栈顶 然后对其操作。引用也是一个东西,他的实质是一个地址。一个记录了引用指向的具体变量内容的 堆内存地址。

   例如 001单元的栈内存单元 存储了引用bean1,即001单元里存储着 @12345

          而在堆内存单元地址 @12345里面存储了 bean1引用的实际内容。(或者是从这个地址开始的,根据变量类型决定)

         这样bean1 就成为人们常说的 “指向内容的引用了”。因为存了内容的地址,所以可以叫指向。(不知道谁发明这个让大家费解的名词。)

 

3.理解了上面之后,bean2=bean1操作之后,会发生以下变化。

    在内存的栈内存区域 的一个新的内存单元002中存储了一个引用的值@12346 。即栈内存单元002里面也存了@12345这玩意儿。 为啥呢?大家可以考虑下=号是什么意思,就是把等号右边的值给左边。

   这样bean2也就指向了@12345的内容了。

4. bean2.setName("cba");这句话执行之后  就由bean2 这个玩意操作了@12345里面 的东西改成了cba

5.所以 无辜的 bean1 啥也没做 就被改了内容。因为bean1 也指向了 @12345

这就好比 业主 给了装修的一把自己家门的钥匙 ,然后 装修的进去把屋子给砸砸,业主也只能无辜的看着这一切的发生。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值