博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java传参方式
阅读量:4293 次
发布时间:2019-05-27

本文共 939 字,大约阅读时间需要 3 分钟。

java学习与交流 2017-09-10 16:31
  1. 对于基本数据类型(int, char etc.),传递的是基本数据类型的值的拷贝

  2. 对于对象引用,传递的是对象对象在堆中地址值的拷贝

数据内存分配

  1. 每新创建一个线程,都会为线程分配一个该线程私有空间,其中存储方法内部定义的局部基本数据类型和对象的地址引用

  2. 堆中数据所有线程共享。堆中存储的是对象实例和数组值。

"=" 赋值操作

"="是一个动作,一个可以改变内存原状态的操作:放弃原有的值或引用,得到"="右边变量的值或引用。

  • 对于基本数据类型:

Java传参方式

num是基本类型,值就直接保存在变量中。

Java传参方式

通过赋值符号=将num1的值赋值给num,因为num1直接存放的是5,所以就等于将num的值直接改变为5。

  • 对于对象类型:

Java传参方式

s变量保存的是实际对象在堆中的地址值引用。

Java传参方式

通过赋值符号,将s的地址引用改变到了"123"内容的地址值的引用。

Java传参方式

通过将s1的地址引用赋值到s,使s现在的地址引用改变到了值为"hahaha"的地址引用。

Java传参方式

此时改变s1的地址引用到值为"xxx"的地址,但是此时并没有改变s的地址引用,s仍然指向"hahaha"。

参数传递

参数传递就是赋值=操作。即是将传入的参数的具体值(基本数据类型)地址引用(对象)赋值给形参。在充分理解上述赋值操作的含义后,有如下示例代码:

Java传参方式

Java传参方式

Java传参方式

Java传参方式

  • 调用 changeValue(int x),因为传入的是基础数据类型,所以形参接收并复制其具体的int值,在方法内部对int值进行了更改,直接反映到了其方法内部的变量内容上,对方法外部的实参是没有影响的。

  • 调用 changeValue(String x),传入的是对象引用,方法的形参复制了传入实参的对象引用的地址值,方法内部对x进行了计算,并对形参进行了引用的重新赋值,但是方法外部的实参的地址引用并没有被改变,故其值也未受改变。

  • 调用 changeValue(A x),传入的是对象引用,方法的形参复制了传入实参的对象引用的地址值,方法内部对x的实例变量进行了更改,改变了A对象在堆中的id的值,所以外层的实参的值被改变了。

Java传参方式

学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群346942462,我们一起学Java!

转载地址:http://izzws.baihongyu.com/

你可能感兴趣的文章
判断时间或者数字是否连续
查看>>
docker-daemon.json各配置详解
查看>>
Mac 下docker路径 /var/lib/docker不存在问题
查看>>
Docker(一)使用阿里云容器镜像服务
查看>>
Docker(二) 基础命令
查看>>
Docker(三) 构建镜像
查看>>
Spring 全家桶注解一览
查看>>
JDK1.8-Stream API使用
查看>>
cant connect to local MySQL server through socket /tmp/mysql.sock (2)
查看>>
vue中的状态管理 vuex store
查看>>
Maven之阿里云镜像仓库配置
查看>>
Maven:mirror和repository 区别
查看>>
微服务网关 Spring Cloud Gateway
查看>>
SpringCloud Feign的使用方式(一)
查看>>
SpringCloud Feign的使用方式(二)
查看>>
关于Vue-cli+ElementUI项目 打包时排除Vue和ElementUI
查看>>
Vue 路由懒加载根据根路由合并chunk块
查看>>
vue中 不更新视图 四种解决方法
查看>>
MySQL 查看执行计划
查看>>
OpenGL ES 3.0(四)图元、VBO、VAO
查看>>