【高频面试题-3】方法的参数传递机制

本文深入解析Java中方法参数的传递机制,包括基本数据类型与引用数据类型的区别,以及String、包装类等对象的不可变性特征。通过具体示例,阐述了在JVM中这些数据如何被存储和处理,帮助读者更好地理解Java内存模型。

【尚硅谷】Java大厂高频面试题(第一季)

看一下下面代码的运行结果
考点?
●方法的参数传递机制
●String、包装类等对象的不可变性

面试题

在这里插入图片描述

运行结果

在这里插入图片描述

结果分析

在这里插入图片描述
在jvm中会将方法存储在方法栈中,每个方法区存储对应该方法的局部变量,对于基本数据类型直接存储值,数组,类类型,字符串等存储的是地址,

  • 字符类型的数据存储在常量池中,方法栈中只存储其对应的在常量池中的地址
  • Integer是类类型,数据存储在堆中,方法栈中只存储其对应的在堆中的地址
  • 数组,数据存储在堆中,方法栈中只存储其对应的在堆中的地址
  • 类,数据存储在堆中,方法栈中只存储其对应的在堆中的地址
    在这里插入图片描述
    方法的参数传递机制:
  1. 形参是基本数据类型
    ◆传递数据值
  2. 实参是引用数据类型
    ◆传递地址值

形参中的变量存储在change方法区,j是基本数据类型,存储的是数据。s是引用数据类型,存储常量池中的地址。a,n,m存储的都是堆中的对应地址

在这里插入图片描述
特殊的类型: String、包装类等对象不可变性。
j+=1;jvm中的操作是:在change方法区将2赋值给j
s+=“world”;jvm中的操作是:首先先在常量池创建一个String对象存储world。让两个字符串拼接,拼接结果再在常量池创建一个String对象存储helloworld,将该地址赋值给change方法区的s
n+=1;jvm中的操作是:再堆中新创建一个201,n断开原来的指向,改为指向201,里面地址改为201的地址
a[0]+=1;jvm中的操作是:指针找到堆中a[0]的地址,将其自增一。
m.a+=1;jvm中的操作是:指针找到堆中int a=10的地址,将其自增一。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

计忆芳华

制作不易,欢迎打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值